Las excepciones son eventos que ocurren durante la ejecución de un programa que interrumpen su flujo normal (generalmente representa un error ocurrido en el programa).
Cuando se lanza una excepción, se interrumpe la ejecución del código normal y el control se transfiere al manejador de excepciones (try…catch) más cercano, si existe.
Es decir, cuando se produce una Excepcion esta puede,
- Ser capturada por un bloque
try-catch
- Si no, pasa a la función que invocó a la que genero el error
Si no se maneja, el programa se detiene 💥
Manejo de excepciones
Lanzar excepciones
Podemos lanzar excepciones en JavaScript utilizando la palabra clave throw
. Esto permite indicar que ha ocurrido un error y proporcionar información adicional sobre él.
La sintaxis es la siguiente:
throw new Error("Mensaje de error");
Veamos un ejemplo sencillo:
function validarEdad(edad) {
if (edad < 18) {
throw new Error("La edad debe ser al menos 18 años.");
}
return "Edad válida";
}
try {
console.log(validarEdad(15));
} catch (error) {
console.error("Se produjo un error:", error.message);
}
En este caso,
- Si se pasa una edad menor a 18, se lanzará una excepción
- Esta se manejará en el bloque
catch
.
Tipos de Errores
JavaScript clasifica los errores en varias categorías, cada una con características y causas específicas. Los principales tipos de errores son:
Tipo de Error | Descripción |
---|---|
Error | Error genérico, la clase base para todas las excepciones. |
TypeError | Ocurre cuando una operación es realizada en un tipo inapropiado. |
RangeError | Se lanza cuando un valor está fuera del rango permitido. |
ReferenceError | Ocurre al intentar acceder a una variable no definida. |
SyntaxError | Se lanza por errores de sintaxis en el código JavaScript. |
URIError | Ocurre al usar funciones de codificación de URI con un URI mal formado. |
EvalError | Se lanza en situaciones de uso incorrecto de la función eval() . |
Ejemplos de Errores
SyntaxError
El código generará un SyntaxError
debido a un paréntesis de cierre faltante.
let x = 10;
console.log(x;
ReferenceError
console.log(nonExistentVariable);
Este código lanzará un ReferenceError
porque nonExistentVariable
no está definida.
TypeError
Aquí, TypeError
se produce porque toUpperCase
no está definido para el tipo Number
.
let num = 123;
num.toUpperCase(); // `toUpperCase` no es un método válido para números
RangeError
El código anterior generará un RangeError
debido a un tamaño de array inválido.
let arr = new Array(-1); // No se puede crear un array con tamaño negativo
Creación de excepciones personalizadas
Además de lanzar excepciones estándar, podemos crear nuestras propias excepciones personalizadas. Esto sirve para proporcionar información más específica sobre los errores en tu aplicación.
Para crear una excepción personalizada, puedes extender la clase Error
de JavaScript:
class MiExcepcion extends Error {
constructor(mensaje) {
super(mensaje);
this.name = "MiExcepcion"; // Establece el nombre de la excepción
}
}
Vamos a verlo en un ejemplo de cómo usar una excepción personalizada:
function validarNombre(nombre) {
if (typeof nombre !== 'string' || nombre.length === 0) {
throw new MiExcepcion("El nombre debe ser una cadena no vacía.");
}
return "Nombre válido";
}
try {
console.log(validarNombre("")); // Lanzará una excepción
} catch (error) {
console.error(`${error.name}: ${error.message}`);
}
En este caso,
MiExcepcion
se utiliza para lanzar un error específico relacionado con la validación de un nombre