Controlar errores en JavaScript con try catch

Resumen: en este tutorial, aprenderá a usar la instrucción try...catch
de JavaScript
para manejar excepciones y cachar errores en el código.
Introducción a la sentencia try…catch de JavaScript
El siguiente ejemplo intenta llamar a la función add()
que no existe:
let result = add(10, 20);
console.log(result);
console.log('Bye');
El motor de JavaScript
emite el siguiente error:
Uncaught TypeError: add is not a function
El mensaje de error indica que add
no es una función y el tipo de error es TypeError
.
Cuando el motor de JavaScript
encuentra un error, lo emite e inmediatamente finaliza la ejecución de todo el script
. En el ejemplo anterior, la ejecución del código se detiene en la primera línea.
En ocasiones se quiere manejar los errores y continuar con la ejecución del código. Para ello, existe la sentencia try...catch
y se usa con la siguiente sintaxis:
try {
// el código puede causar un error
} catch(error){
// código para manejar el error
}
En esta sintaxis:
- Primero, colocas el código que puede causar un error en el bloque
try
. - Segundo, implementa la lógica para manejar el error en el bloque
catch
.
Manejo de errores con try…catch de JavaScript
Si ocurre un error en el bloque try
, el motor de JavaScript
ejecuta inmediatamente el código en el bloque catch
. Además, el motor de JavaScript
proporciona un objeto de error que contiene información detallada sobre el error.
Básicamente, el objeto de error tiene al menos dos propiedades:
name
: especifica el nombre del error.message
: explica el error en detalle.
Si no se produce ningún error en el bloque try
, el motor de JavaScript
ignora el bloque catch
.
"Ten en cuenta que los navegadores web pueden agregar más propiedades al objeto de error. Por ejemplo, Firefox agrega propiedades de nombre de archivo, número de línea y pila al objeto de error."
Es una buena práctica colocar solo el código que puede causar una excepción en el bloque try
.
Ejemplos del uso de la sentencia try…catch de JavaScript
El siguiente ejemplo usa la sentencia try...catch
para manejar el error:
try {
let result = add(10, 20);
console.log(result);
} catch (e) {
console.log({ name: e.name, message: e.message });
}
console.log('Hasta la vista, baby');
Resultado:
{name: 'TypeError', message: 'add is not a function'}
Hasta la vista, baby
En este ejemplo, llamamos a la función add()
y asignamos el valor de retorno a la variable de resultado. Debido a que la función add()
no existe, el motor de JavaScript
omite la declaración que envía el resultado a la consola:
console.log(result);
E inmediatamente ejecuta la declaración en el bloque catch
que genera el nombre y el mensaje del error:
console.log({ name: e.name, message: e.message });
Como ya manejamos el error, el motor de JavaScript
continúa ejecutando la última declaración:
console.log('Hasta la vista, baby');
Ignorar el bloque catch
El siguiente ejemplo define la función add()
que devuelve la suma de dos argumentos:
const add = (x, y) => x + y;
try {
let result = add(10, 20);
console.log(result);
} catch (e) {
console.log({ name: e.name, message: e.message });
}
console.log('Hasta la vista, baby');
Resultado:
30
Hasta la vista, baby
En este ejemplo, no se produce ningún error porque existe la función add()
. Por lo tanto, el motor de JavaScript
omite el bloque catch
.
La variable de excepción
Cuando ocurre una excepción en el bloque try
, la variable de excepción (e)
en el bloque catch
almacena el objeto de excepción.
Si no deseas utilizar la variable de excepción, puede omitirla así:
try {
//...
} catch {
//...
}
Por ejemplo, lo siguiente usa la sentencia try…catch
sin la variable de excepción:
const isValidJSON = (str) => {
try {
JSON.parse(str);
return true;
} catch {
return false;
}
};
let valid = isValidJSON(`{"language":"JavaScript"}`);
console.log(valid);
Cómo funciona.
Primero, define la función isValidJSON()
que acepta una cadena y devuelve true si esa cadena es un JSON
válido o falso en caso contrario.
Para validar JSON
, la función isValidJSON()
usa el método JSON.parse()
y la sentencia try...catch
.
El método JSON.parse()
analiza una cadena JSON
y devuelve un objeto. Si la cadena de entrada no es un JSON
válido, JSON.parse()
genera una excepción.
Si no ocurre ninguna excepción, la función devuelve true en el bloque try
. De lo contrario, devuelve false
en el bloque catch
.
En segundo lugar, se llama a la función isValidJSON()
y se le pasa una cadena JSON
:
let valid = isValidJSON(`{"language":"JavaScript"}`);
Dado que la cadena de entrada tiene un formato JSON
válido, la función devuelve true.
Tercero, envía el resultado a la consola:
console.log(valid);
Resumen
- Usa la declaración
try...catch
para manejar las excepciones enJavaScript
. - Coloca solo el código que puede causar una excepción en el bloque
try
.