Fehlerbehandlung
Ein Fehler ist die Art, wie eine Funktion die Fortsetzung verweigert. Diese Seite nutzt { drink: "tea" } ohne size. throw new Error("missing size") stoppt label sofort, noch vor return. catch empfängt dieses Error-Objekt. Die Seitenzeile lautet caught / missing size.
Nicht die Seite zum Suchen von Fehlern
Die vorige Seite rief console.error("missing size") auf und gab danach einen Ersatztext zurück. Das Skript lief weiter. Es wurde nichts geworfen. console.error wirft nicht.
throw ist anders. Die Zeilen danach in derselben Funktion laufen nicht. Nur catch kann übernehmen. Die Zeile der vorigen Seite war fixed / tea / regular.
Ein Error trägt zwei Zeichenketten
new Error("missing size") erzeugt ein Objekt. error.name ist Error. error.message ist der übergebene Text, missing size. Das Objekt selbst zu protokollieren hilft weniger als diese beiden Felder.
catch empfängt das Error
label wirft, wenn size fehlt. Der Aufruf steht in try, also läuft catch und gibt error.message aus. Der Text ist 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);
}
Das Protokoll ist missing size. label hat sein return nie erreicht, also entsteht hier kein tea / missing size.
Eine gute Bestellung überspringt catch
Geben Sie size den Wert regular. label kehrt normal zurück. catch läuft nicht.
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);
}
Das Protokoll ist tea / regular.
finally läuft in beiden Fällen
finally läuft nach try, wenn der Aufruf gelingt, und nach catch, wenn er wirft. Nutzen Sie es für einen Schritt, der in beiden Fällen passieren muss.
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");
}
Die Protokolle sind missing size und danach done. Nach dem Wurf schreibt finally den Wert done.
Name und Nachricht lesen
Fangen Sie dasselbe Error ab und geben Sie die beiden Felder in eigenen Zeilen aus.
try {
throw new Error("missing size");
} catch (error) {
console.log(error.name);
console.log(error.message);
}
Die Protokolle sind Error und danach missing size. Damit ist error.name gleich Error und error.message gleich missing size.
Die Prüfung wirft, der Aufrufer fängt
requireSize kennt die Regel. Sie wirft und baut keine Bezeichnung. Der Aufrufer entscheidet, was gedruckt wird.
function requireSize(order) {
if (!order.size) {
throw new Error("missing size");
}
}
try {
requireSize({ drink: "tea" });
console.log("ok");
} catch (error) {
console.log(error.message);
}
Das Protokoll ist missing size. Die Zeile console.log("ok") läuft nicht, weil der Wurf aus requireSize zu catch gesprungen ist.
Die Zeile unter der Tasse
Die Seite ruft label ohne Größe auf. catch baut die sichtbare Zeile aus der Nachricht.
<!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>
Die Zeile lautet caught / missing size. Eine vollständige Bestellung hätte tea / regular zurückgegeben und catch ungenutzt gelassen. fixed / tea / regular war die Seite zum Suchen von Fehlern.
An der Theke
- Rufen Sie
label({ drink: "tea" })intryauf. Das catch-Protokoll ist missing size. - Rufen Sie
label({ drink: "tea", size: "regular" })auf. Das Protokoll ist tea / regular, und catch läuft nicht. - Legen Sie
finallyum den fehlschlagenden Aufruf. Das zweite Protokoll ist done. - Lesen Sie
error.nameunderror.message. Die Protokolle sind Error und missing size. - Lesen Sie die Seitenzeile: caught / missing size.
Häufige Fehler
throw stoppt die Funktion. console.error wirft nicht und stoppt die Funktion nicht.
- Erwarten, dass die Zeilen nach
throwlaufen catchvergessen und den Fehler ungefangen lassen- Glauben,
finallylaufe nur nach Erfolg error.messagefür den NamenErrorhalten- Die Zeile als fixed / tea / regular lesen
Das bleibt
throw new Error("missing size")stopptlabelvorreturncatchempfängt das Error und gibterror.messageaus; der Text ist missing size- Eine vollständige Bestellung protokolliert tea / regular und überspringt
catch - Nach dem Wurf schreibt
finallyden Wert done - Die Seitenzeile lautet caught / missing size
🧠 Testen Sie Ihr Wissen
Testen Sie Ihr Wissen
Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen
📝 Anweisungen
- Lesen Sie jede Frage sorgfältig
- Wählen Sie die beste Antwort für jede Frage
- Sie können das Quiz so oft wiederholen, wie Sie möchten
- Ihr Fortschritt wird oben angezeigt