Errores en JavaScript
Un error es la forma en que una función se niega a seguir. Esta página usa { drink: "tea" } sin size. throw new Error("missing size") detiene label de inmediato, antes de return. catch recibe ese Error. La línea de la página dice caught / missing size.
No es la página de depuración
La página anterior llamó a console.error("missing size") y luego devolvió un texto de reserva. El script siguió. No se lanzó nada. console.error no lanza.
throw es distinto. Las líneas posteriores en esa función no se ejecutan. Solo catch puede hacerse cargo. La línea de depuración anterior era fixed / tea / regular.
Un Error lleva dos cadenas
new Error("missing size") crea un objeto. error.name es Error. error.message es el texto pasado, missing size. Registrar el objeto ayuda menos que registrar esos dos campos.
catch recibe el Error
label lanza cuando falta size. La llamada está dentro de try, así que catch se ejecuta e imprime error.message. El texto es missing size.
function label(order) {
if (!order.size) {
throw new Error("missing size");
}
return order.drink + " / " + order.size;
}
try {
console.log(label({ drink: "tea" }));
} catch (error) {
console.log(error.message);
}
El registro es missing size. label nunca llegó a su return, así que aquí no se produce tea / missing size.
Un buen pedido se salta catch
Dale a size el valor regular. label vuelve con normalidad. catch no se ejecuta.
function label(order) {
if (!order.size) {
throw new Error("missing size");
}
return order.drink + " / " + order.size;
}
try {
console.log(label({ drink: "tea", size: "regular" }));
} catch (error) {
console.log(error.message);
}
El registro es tea / regular.
finally se ejecuta de las dos formas
finally corre después de try cuando la llamada tiene éxito, y después de catch cuando lanza. Úsalo para un paso que debe ocurrir en ambos casos.
function label(order) {
if (!order.size) {
throw new Error("missing size");
}
return order.drink + " / " + order.size;
}
try {
label({ drink: "tea" });
} catch (error) {
console.log(error.message);
} finally {
console.log("done");
}
Los registros son missing size y después done. Tras el lanzamiento, finally escribe done.
Lee el nombre y el mensaje
Captura el mismo Error e imprime los dos campos en líneas distintas.
try {
throw new Error("missing size");
} catch (error) {
console.log(error.name);
console.log(error.message);
}
Los registros son Error y después missing size. Así, error.name es Error y error.message es missing size.
La comprobación lanza, quien llama captura
requireSize conoce la regla. Lanza y no construye una etiqueta. Quien llama decide qué imprimir.
function requireSize(order) {
if (!order.size) {
throw new Error("missing size");
}
}
try {
requireSize({ drink: "tea" });
console.log("ok");
} catch (error) {
console.log(error.message);
}
El registro es missing size. La línea console.log("ok") no se ejecuta, porque el lanzamiento de requireSize saltó a catch.
La línea bajo la taza
La página llama a label sin tamaño. catch arma la línea visible a partir del mensaje.
<!DOCTYPE html>
<html>
<body>
<p id="line">…</p>
<script>
function label(order) {
if (!order.size) {
throw new Error("missing size");
}
return order.drink + " / " + order.size;
}
let line = "";
try {
line = label({ drink: "tea" });
} catch (error) {
line = "caught / " + error.message;
}
document.getElementById("line").textContent = line;
</script>
</body>
</html>
La línea dice caught / missing size. Un pedido completo habría devuelto tea / regular y dejado catch sin usar. fixed / tea / regular era la página de depuración.
En el mostrador
- Llama a
label({ drink: "tea" })dentro detry. El registro de catch es missing size. - Llama a
label({ drink: "tea", size: "regular" }). El registro es tea / regular, y catch no se ejecuta. - Añade
finallyalrededor de la llamada que falla. El segundo registro es done. - Lee
error.nameyerror.message. Los registros son Error y missing size. - Lee la línea de la página: caught / missing size.
Fallos en el mostrador
throw detiene la función. console.error no lanza y no detiene la función.
- Esperar que las líneas después de
throwse ejecuten - Olvidar
catchy dejar el error sin capturar - Creer que
finallysolo corre tras el éxito - Leer
error.messagecomo el nombreError - Leer la línea como fixed / tea / regular
Quédate con esto
throw new Error("missing size")detienelabelantes dereturncatchrecibe el Error e imprimeerror.message, que es missing size- Un pedido completo registra tea / regular y se salta
catch - Tras el lanzamiento,
finallyescribe done - La línea de la página dice caught / missing size
🧠 Pon a Prueba tu Conocimiento
Pon a Prueba tu Conocimiento
Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema
📝 Instrucciones
- Lee cada pregunta cuidadosamente
- Selecciona la mejor respuesta para cada pregunta
- Puedes repetir el quiz tantas veces como quieras
- Tu progreso se mostrará en la parte superior