Lektionen des Moduls (4/4)
try / catch / throw
Ein Fehler (Error) in JavaScript ist ein Wert (meistens ein Error-Objekt), der den normalen
Programmfluss unterbricht und den Call Stack (Aufrufstapel) so lange nach oben wandert, bis ihn jemand
abfängt. Das Konstrukt zur Behandlung dieses Falls ist try / catch.
Einen Fehler auslösen: throw
function dividi(a, b) {
if (b === 0) {
throw new Error('Divisione per zero');
}
return a / b;
}throw bricht die aktuelle Funktion sofort ab.
Abfangen: try / catch
try {
const r = dividi(10, 0);
console.log('ok', r);
} catch (err) {
console.log('errore:', err.message); // 'errore: Divisione per zero'
}
// Il programma continua qui, anche se c'è stato un errore.Alles, was sich innerhalb von try befindet, wird ausgeführt; wird ein Fehler ausgelöst (mit
throw oder durch eine fehlgeschlagene Operation), springt die Kontrolle zum catch-Block.
Die Variable nach catch (...) erhält den Fehler.
finally (optional)
Code, der immer ausgeführt wird, egal ob ein Fehler aufgetreten ist oder nicht. Nützlich zum Freigeben von Ressourcen:
try {
// ... operazione rischiosa
} catch (err) {
// ... log
} finally {
// ... pulizia (sempre eseguita)
}Wann man es verwendet (und wann nicht)
- Ja: E/A-Operationen (
JSON.parsebei nicht vertrauenswürdigen Eingaben,fetch, Festplattenzugriff), Konvertierungen, die fehlschlagen können. - Vielleicht nicht: für den normalen Kontrollfluss. Wenn du weißt, dass eine Eingabe ungültig
sein kann, ist es besser, sie mit einem
ifzu prüfen, anstatt einen Fehler auszulösen und abzufangen.
// Tipico: parsing JSON di difesa
function parseJsonSafe(text) {
try {
return { ok: true, value: JSON.parse(text) };
} catch (err) {
return { ok: false, error: err.message };
}
}
parseJsonSafe('{"a":1}'); // { ok: true, value: {a:1} }
parseJsonSafe('non json'); // { ok: false, error: '...' }Probier es aus
Definiere `safeDivide(a, b)`: Wenn b gleich 0 ist, löse einen Error mit der Nachricht 'Divisione per zero' aus, andernfalls gib a/b zurück.
Hinweis anzeigen
if (b === 0) throw new Error('...'); und dann return a / b.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Definiere `parseJsonSafe(text)`: Wenn text ein gültiges JSON ist, gib { ok: true, value: <Objekt> } zurück, andernfalls { ok: false }. Verwende try/catch bei JSON.parse.
Hinweis anzeigen
Kapsle JSON.parse in try; im catch-Block gib { ok: false } zurück.
Lösung nach 3 Versuchen verfügbar