Direkt zum Hauptinhalt springen
eLearner.app
Modul 5 · Lektion 4 von 420/32 im Kurs~12 min
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

JS
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

JS
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:

JS
try {
  // ... operazione rischiosa
} catch (err) {
  // ... log
} finally {
  // ... pulizia (sempre eseguita)
}

Wann man es verwendet (und wann nicht)

  • Ja: E/A-Operationen (JSON.parse bei 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 if zu prüfen, anstatt einen Fehler auszulösen und abzufangen.
JS
// 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

Übung#js.m5.l4.e1
Versuche: 0Wird geladen…

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.

Editor wird geladen…
Hinweis anzeigen

if (b === 0) throw new Error('...'); und dann return a / b.

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#js.m5.l4.e2
Versuche: 0Wird geladen…

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.

Editor wird geladen…
Hinweis anzeigen

Kapsle JSON.parse in try; im catch-Block gib { ok: false } zurück.

Lösung nach 3 Versuchen verfügbar