
Una expresión try…catch en javascript se usa para probar una sección de expresiones y especifica una forma de manejar las excepciones si se lanzan.
Características generales
Estructura try catch en javascript
try { try_statements } [catch (exception_var_1) { catch_statements_1 }] ... [catch (exception_var_2) { catch_statements_2 }] [finally { finally_statements }]
try_statements
Expresiones que se ejecutarán y que podrían generar una excepción.
catch_statements_1 y catch_statements_2
Expresiones que se ejecutarán si se lanza una excepción en try
.
exception_var_1 y exception_var_2
Un identificador que se utiliza para almacenar el valor del objeto de excepción asociado con catch
.
finally_statements
Expresiones que se ejecutarán después de que se complete una ejecución try
, y estas expresiones se ejecutarán tanto si se lanza una excepción como si no.
Una expresión try consiste en una sección que contiene una o más expresiones (los corchetes deben usarse {}
incluso si la sección consiste en una expresión), y debe contener al menos una catch sección o sección finally
. Esto significa que hay tres formas de expresiones try en javascript:
- try…catch
- try…finally
- try…catch…finally
Una sección catch contiene expresiones que especifican qué hacer cuando se lanza una excepción en una sección try en javascript. Es decir, queremos que la ejecución de expresiones programáticas en una sección sea try
exitosa, y si su implementación no es exitosa, queremos transferir el control a una sección catch
. Si cualquier expresión (o función llamada) en una sección try
arroja una excepción, entonces el control se transfiere directamente a una sección catch
, y si no ocurre ninguna excepción en una sección, una sección se try
salta por completo catch
.
La sección finally
se llevará a cabo después de la puesta en práctica del Departamento try
‘s catch
pero antes de los términos de programación que sigue try
. Siempre se implementará tanto si se lanza una excepción como si no.
Puede anidar expresiones try
entre sí y, si la expresión try
interna no tiene una sección catch
adecuada, se utiliza una sección catch
para la expresión try
principal. Tenga en cuenta que puede usarse try
para manejar excepciones lanzadas por JavaScript, así como excepciones privadas lanzadas por el usuario.
Secciones catch no policiales
Cuando en una sola partición se usa incondicionalmente catch, la ejecución del programa se moverá a esa partición cada vez que se produzca una excepción. Por ejemplo, cuando ocurre una excepción en el siguiente código, el control se transferirá directamente a una sección catch
:
try { throw 'myException'; // generar una excepción } catch (e) { // Expresiones necesarias para manejar la excepción logMyErrors(e); // registra la información del objeto de excepción }
Una sección especifica un catch
identificador (su nombre e
en el ejemplo anterior) que contiene el valor arrojado por una expresión throw
. Tenga en cuenta que JavaScript crea un identificador cuando se ingresa una partición catch
y lo pone a disposición del ámbito local y ese identificador permanecerá disponible hasta el final de una partición y catch
no estará disponible posteriormente.
Condicionales catch
Las expresiones condicionales se pueden usar if...else
dentro de una sección para catch
probar si se cumple una condición específica del objeto Exception. En el siguiente ejemplo, probaremos si la excepción lanzada es de tipo TypeError
OR RangeError
o EvalError
:
try { myroutine(); // Esta función puede lanzar una excepción de cualquier tipo </em> } catch (e) { if (e instanceof TypeError) { // ... } else if (e instanceof RangeError) { // ... } else if (e instanceof EvalError) { // ... } else { // ... logMyErrors(e); } }
ID de excepción
Cuando se lanza una excepción en una sección try
, exception_var
(por ejemplo, e
n catch (e)
) mantendrá el valor especificado por la expresión throw
, y puede usar este identificador para obtener información sobre la excepción que se lanzó.
Tenga en cuenta que este identificador es local, es decir, se creó al ingresar a la partición catch
y no estará disponible una vez que la partición haya terminado de ejecutarse catch
.
Sección finally
Una sección que finally
contiene las expresiones que se ejecutarán después de la sección try
y catch
, pero antes de las expresiones que la siguen; Tenga en cuenta que una sección finally
se ejecutará tanto si se lanza la excepción como si no, y si se lanza una excepción, las expresiones de una sección se ejecutarán tanto si la excepción se finally
gestiona catch
como si no. Puede utilizar una sección finally
para ajustar la ejecución del script cuando se produce una excepción, como cerrar los recursos que ha utilizado el script …
Ya sea que haya una excepción o no, puede resultarle sorprendente que haya una sección que implemente modismos; pero esta sección tiene un propósito útil e importante. Es posible que el código que sigue a una expresión try
no se ejecute si no se maneja la excepción. Entonces, si ponemos un código de bloqueo de recursos en él, es posible que no siempre se ejecute, pero si lo colocamos en una sección, finally
siempre se ejecutará.
El siguiente ejemplo abrirá un archivo en el disco duro y luego usará una función dentro de una partición para try
escribir en él (recuerde que JavaScript puede usarse en el lado del servidor, lo que significa que se puede acceder a archivos locales). Si ocurre una excepción y el archivo está abierto, las expresiones en la sección del finally
archivo se cerrarán antes de que el script termine de ejecutarse:
openMyFile(); try { // reservar el recurso writeMyFile(theData); } finally { closeMyFile(); // cierra el recurso de todos modos }
Ejemplos y aplicaciones en código
A continuación, se muestra un ejemplo de una expresión try
con finally
solo la sección, contenida dentro de una expresión try
con catch
solo la sección :
try { try { throw new Error('oops'); } finally { console.log('finally'); } } catch (ex) { console.error('outer', ex.message); } // salida // "finalmente" // "exterior" "oops"
Si agregamos la partición catch
a la expresión try
interna para manejar la excepción:
try { try { throw new Error('oops'); } catch (ex) { console.error('inner', ex.message); } finally { console.log('finally'); } } catch (ex) { console.error('outer', ex.message); } // salida // "interior" "oops" // "finalmente"
Tenga en cuenta que cualquier excepción se manejará una vez a través de la sección más cercana catch
a ella, a menos que se rechace (por expresión throw
), es decir, si aparece alguna excepción fuera de la expresión try
interna , será manejada por la sección catch
externa.
Devolver valores sección finally
Si se devuelve un valor dentro de una sección, finally
el valor final se devolverá de try...catch...finally
toda la sección, independientemente de las expresiones return
presentes en las secciones try
y catch
:
(function() { try { try { throw new Error('oops'); } catch (ex) { console.error('inner', ex.message); throw ex; } finally { console.log('finally'); return; } } catch (ex) { console.error('outer', ex.message); } })(); // salida // "interior" "oops" // "finalmente"
Soporte de navegadores
Característica | Chrome | Firefox | IE | Opera | Safari |
---|---|---|---|---|---|
Soporte básico | sí | sí | sí | sí | sí |
- Expresión const en JavaScript
- Expresión let en JavaScript
- Expresión var en JavaScript
- Expresión try…catch en JavaScript
- Expresión throw en JavaScript
- Continue en JavaScript
- Switch en JavaScript
- Expresiones if…else en JavaScript
- Declaración vacía o empty en JavaScript
- Break en JavaScript
- Sentencia block en JavaScript
- Arguments en JavaScript
- Promise en JavaScript
- Number en JavaScript
- Características JSON en JavaScript
- Array en JavaScript
- RegExp en JavaScript
- String en JavaScript
- Date en JavaScript
- Math en JavaScript
- URIError en JavaScript
- TypeError en JavaScript
- SyntaxError en JavaScript
- ReferenceError en JavaScript
- RangeError en JavaScript
- EvalError en JavaScript
- Características Boolean en JavaScript
- Error en JavaScript
- Función Symbol en JavaScript
- Constructor Function en JavaScript
- Constructor Object en JavaScript
- Función unescape() en JavaScript
- Función eval() en JavaScript
- Valor null en JavaScript
- Características Undefined en JavaScript
- Características NaN en JavaScript
- Características Infinity en JavaScript
- Función parseFloat() en JavaScript
- Función isNaN() en JavaScript
- Función isFinite() en JavaScript
- Función escape() en JavaScript
- Función encodeURIComponent() en JavaScript