ES6 - Manejo de errores
Hay tres tipos de errores en la programación: errores de sintaxis, errores en tiempo de ejecución y errores lógicos.
Errores de sintaxis
Errores de sintaxis, también llamados parsing errors, ocurren en tiempo de compilación en lenguajes de programación tradicionales y en tiempo de interpretación en JavaScript. Cuando ocurre un error de sintaxis en JavaScript, solo el código contenido dentro del mismo hilo que el error de sintaxis se ve afectado y el resto del código en otros hilos se ejecuta asumiendo que nada en ellos depende del código que contiene el error.
Errores en tiempo de ejecución
Errores de tiempo de ejecución, también llamados exceptions, ocurren durante la ejecución (después de la compilación / interpretación). Las excepciones también afectan el hilo en el que ocurren, permitiendo que otros hilos de JavaScript continúen con la ejecución normal.
Errores lógicos
Los errores lógicos pueden ser el tipo de error más difícil de rastrear. Estos errores no son el resultado de un error de sintaxis o de tiempo de ejecución. En cambio, ocurren cuando comete un error en la lógica que impulsa su secuencia de comandos y no obtiene el resultado esperado.
No puede detectar esos errores, porque depende de los requisitos de su negocio, qué tipo de lógica desea poner en su programa.
JavaScript lanza instancias del objeto Error cuando ocurren errores en tiempo de ejecución. La siguiente tabla enumera los tipos predefinidos del objeto Error.
No Señor | Objeto de error y descripción |
---|---|
1 | EvalError Crea una instancia que representa un error que ocurre con respecto a la función global eval(). |
2 | RangeError Crea una instancia que representa un error que ocurre cuando una variable numérica o parámetro está fuera de su rango válido. |
3 | ReferenceError Crea una instancia que representa un error que se produce al eliminar la referencia a una referencia no válida. |
4 | SyntaxError Crea una instancia que representa un error de sintaxis que se produce al analizar el código. |
5 | TypeError Crea una instancia que representa un error que ocurre cuando una variable o parámetro no es de un tipo válido. |
6 | URIError Crea una instancia que representa un error que ocurre cuando encodeURI() o decodeURI() se pasan parámetros inválidos. |
Lanzar excepciones
Se puede generar un error (predefinido o definido por el usuario) utilizando el throw statement. Posteriormente, estas excepciones se pueden capturar y puede tomar la acción apropiada. A continuación se muestra la sintaxis de la misma.
Sintaxis: lanzar una excepción genérica
throw new Error([message])
OR
throw([message])
Sintaxis: lanzar una excepción específica
throw new Error_name([message])
Manejo de excepciones
El manejo de excepciones se logra con un try...catch statement. Cuando el programa encuentra una excepción, el programa terminará de manera hostil. Para protegernos contra este error inesperado, podemos envolver nuestro código en una declaración try ... catch.
El bloque try debe ir seguido de exactamente un bloque catch o un bloque final (o uno de ambos). Cuando ocurre una excepción en el bloque try, la excepción se coloca en e y se ejecuta el bloque catch. El bloque opcional finalmente se ejecuta incondicionalmente después de intentar / atrapar
A continuación se muestra la sintaxis de la misma.
try {
// Code to run
[break;]
} catch ( e ) {
// Code to run if an exception occurs
[break;]
}[ finally {
// Code that is always executed regardless of
// an exception occurring
}]
Ejemplo
var a = 100;
var b = 0;
try {
if (b == 0 ) {
throw(“Divide by zero error.”);
} else {
var c = a / b;
}
}
catch( e ) {
console.log("Error: " + e );
}
Salida
La siguiente salida se muestra en la ejecución exitosa del código anterior.
Error: Divide by zero error
Note - Nota: Puede generar una excepción en una función y luego puede capturar esa excepción en la misma función o en la función de llamada usando un try...catch bloquear.
El método onerror ()
los onerrorEl controlador de eventos fue la primera característica que facilitó el manejo de errores en JavaScript. El evento de error se dispara en el objeto de ventana siempre que ocurre una excepción en la página.
Ejemplo
<html>
<head>
<script type = "text/javascript">
window.onerror = function () {
document.write ("An error occurred.");
}
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type = "button" value = "Click Me" onclick = "myFunc();" />
</form>
</body>
</html>
Salida
La siguiente salida se muestra en la ejecución exitosa del código anterior.
El controlador de eventos onerror proporciona tres piezas de información para identificar la naturaleza exacta del error:
Error message - El mismo mensaje que mostraría el navegador para el error dado.
URL - El archivo en el que ocurrió el error.
Line number - El número de línea en la URL proporcionada que causó el error.
El siguiente ejemplo muestra cómo extraer esta información.
Ejemplo
<html>
<head>
<script type = "text/javascript">
window.onerror = function (msg, url, line) {
document.write ("Message : " + msg );
document.write ("url : " + url );
document.write ("Line number : " + line );
}
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type = "button" value = "Click Me" onclick = "myFunc();" />
</form>
</body>
</html>
Errores personalizados
JavaScript admite el concepto de errores personalizados. El siguiente ejemplo explica lo mismo.
Ejemplo 1: Error personalizado con mensaje predeterminado
function MyError(message) {
this.name = 'CustomError';
this.message = message || 'Error raised with default message';
}
try {
throw new MyError();
} catch (e) {
console.log(e.name);
console.log(e.message); // 'Default Message'
}
La siguiente salida se muestra en la ejecución exitosa del código anterior.
CustomError
Error raised with default message
Ejemplo 2: Error personalizado con mensaje de error definido por el usuario
function MyError(message) {
this.name = 'CustomError';
this.message = message || 'Default Error Message';
} try {
throw new MyError('Printing Custom Error message');
}
catch (e) {
console.log(e.name);
console.log(e.message);
}
La siguiente salida se muestra en la ejecución exitosa del código anterior.
CustomError
Printing Custom Error message