Chargement...

Erreurs JavaScript

Une erreur est la façon dont une fonction refuse de continuer. Cette page utilise { drink: "tea" } sans size. throw new Error("missing size") arrête label tout de suite, avant return. catch reçoit cet Error. La ligne de la page se lit caught / missing size.

Ce n'est pas la page de débogage

La page précédente a appelé console.error("missing size"), puis a renvoyé un texte de repli. Le script a continué. Rien n'a été lancé. console.error ne lance pas.
throw est différent. Les lignes qui suivent dans cette fonction ne s'exécutent pas. Seul catch peut prendre le relais. La ligne de débogage précédente était fixed / tea / regular.

Un Error porte deux chaînes

new Error("missing size") crée un objet. error.name vaut Error. error.message est le texte passé, missing size. Afficher l'objet aide moins que d'afficher ces deux champs.

catch reçoit l'Error

label lance quand size manque. L'appel est dans try, donc catch s'exécute et affiche error.message. Le texte est missing size.

Attraper une taille absente

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);
}

Le journal est missing size. label n'a jamais atteint son return, donc tea / missing size n'est pas produit ici.

Une bonne commande saute catch

Donne à size la valeur regular. label revient normalement. catch ne s'exécute pas.

Une commande complète

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);
}

Le journal est tea / regular.

finally s'exécute dans les deux cas

finally s'exécute après try quand l'appel réussit, et après catch quand il lance. Sers-t'en pour une étape qui doit avoir lieu dans les deux cas.

finally après 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");
}

Les journaux sont missing size, puis done. Après le lancement, finally écrit done.

Lire le nom et le message

Attrape le même Error et affiche les deux champs sur des lignes séparées.

Nom et message

javascript
try {
throw new Error("missing size");
} catch (error) {
console.log(error.name);
console.log(error.message);
}

Les journaux sont Error, puis missing size. Ainsi error.name vaut Error et error.message vaut missing size.

Le contrôle lance, l'appelant attrape

requireSize connaît la règle. Elle lance et ne construit pas d'étiquette. L'appelant décide quoi afficher.

Séparer le contrôle

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);
}

Le journal est missing size. La ligne console.log("ok") ne s'exécute pas, parce que le lancement de requireSize a sauté vers catch.

La ligne sous la tasse

La page appelle label sans taille. catch construit la ligne visible à partir du message.

Démo de la page — une erreur attrapée

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 ligne se lit caught / missing size. Une commande complète aurait renvoyé tea / regular et laissé catch inutilisé. fixed / tea / regular était la page de débogage.

Au comptoir

  1. Appelle label({ drink: "tea" }) dans try. Le journal de catch est missing size.
  2. Appelle label({ drink: "tea", size: "regular" }). Le journal est tea / regular, et catch ne s'exécute pas.
  3. Ajoute finally autour de l'appel qui échoue. Le second journal est done.
  4. Lis error.name et error.message. Les journaux sont Error et missing size.
  5. Lis la ligne de la page : caught / missing size.

Ratés au comptoir

throw arrête la fonction. console.error ne lance pas et n'arrête pas la fonction.

  • Attendre que les lignes après throw s'exécutent
  • Oublier catch et laisser l'erreur non attrapée
  • Croire que finally ne court qu'après un succès
  • Lire error.message comme le nom Error
  • Lire la ligne comme fixed / tea / regular

À retenir

  • throw new Error("missing size") arrête label avant return
  • catch reçoit l'Error et affiche error.message, qui vaut missing size
  • Une commande complète journalise tea / regular et saute catch
  • Après le lancement, finally écrit done
  • La ligne de la page se lit caught / missing size

🧠 Testez Vos Connaissances

Prêt à Commencer

Testez Vos Connaissances

Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet

❓
5
Questions
🎯
70%
Pour Réussir
♾️
∞
Temps
🔄
∞
Tentatives

📝 Instructions

  • Lisez chaque question attentivement
  • Sélectionnez la meilleure réponse pour chaque question
  • Vous pouvez refaire le quiz autant de fois que vous le souhaitez
  • Votre progression sera affichée en haut