Cargando...

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.

Capturar un tamaño ausente

javascript
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.

Un pedido completo

javascript
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.

finally después de un throw

javascript
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.

Nombre y mensaje

javascript
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.

Separar la comprobación

javascript
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.

Demo de la página — un error capturado

html
<!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

  1. Llama a label({ drink: "tea" }) dentro de try. El registro de catch es missing size.
  2. Llama a label({ drink: "tea", size: "regular" }). El registro es tea / regular, y catch no se ejecuta.
  3. Añade finally alrededor de la llamada que falla. El segundo registro es done.
  4. Lee error.name y error.message. Los registros son Error y missing size.
  5. 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 throw se ejecuten
  • Olvidar catch y dejar el error sin capturar
  • Creer que finally solo corre tras el éxito
  • Leer error.message como el nombre Error
  • Leer la línea como fixed / tea / regular

Quédate con esto

  • throw new Error("missing size") detiene label antes de return
  • catch recibe el Error e imprime error.message, que es missing size
  • Un pedido completo registra tea / regular y se salta catch
  • Tras el lanzamiento, finally escribe done
  • La línea de la página dice caught / missing size

🧠 Pon a Prueba tu Conocimiento

Listo para Empezar

Pon a Prueba tu Conocimiento

Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema

❓
5
Preguntas
🎯
70%
Para Aprobar
♾️
∞
Tiempo
🔄
∞
Intentos

📝 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