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.
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.
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.
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.
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.
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.
<!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
- Appelle
label({ drink: "tea" })danstry. Le journal de catch est missing size. - Appelle
label({ drink: "tea", size: "regular" }). Le journal est tea / regular, et catch ne s'exécute pas. - Ajoute
finallyautour de l'appel qui échoue. Le second journal est done. - Lis
error.nameeterror.message. Les journaux sont Error et missing size. - 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
throws'exécutent - Oublier
catchet laisser l'erreur non attrapée - Croire que
finallyne court qu'après un succès - Lire
error.messagecomme le nomError - Lire la ligne comme fixed / tea / regular
À retenir
throw new Error("missing size")arrêtelabelavantreturncatchreçoit l'Error et afficheerror.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
Testez Vos Connaissances
Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet
📝 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