Fehler gehören zum Programmieren dazu. Mit try/catch fängst du sie ab, damit das Programm nicht abstürzt.
try, catch, finally
Ergebnis
vorher Fehler: SyntaxError läuft immer Programm läuft weiter
try: Code, der fehlschlagen kanncatch: läuft nur bei einem Fehler;fehlerist das Fehlerobjektfinally: läuft immer (Aufräumen: Dateien schließen, Ladeanzeige ausblenden)
Das Error-Objekt
Ergebnis
TypeError Cannot read properties of null (reading 'eigenschaft') true true TypeError: Cannot read properties of null (reading 'eigenschaft')
Häufige Fehlertypen
| Typ | Ursache |
|---|---|
SyntaxError | ungültiger Code oder ungültiges JSON |
ReferenceError | Variable existiert nicht |
TypeError | falscher Typ, z. B. null.x oder Aufruf eines Nicht-Funktionswerts |
RangeError | Wert außerhalb des erlaubten Bereichs |
URIError, EvalError | selten |
Ergebnis
ReferenceError: unbekannteVariable is not defined TypeError: 5 is not a function RangeError: Invalid array length RangeError: Invalid count value: -1 SyntaxError: Unexpected token 'x', "x" is not valid JSON
Eigene Fehler auslösen
Mit throw löst du selbst Fehler aus:
Ergebnis
5 RangeError: Division durch 0 ist nicht erlaubt
Wirf immer ein Error-Objekt (oder eine Unterklasse), nicht nur Text, denn nur so gibt es einen Stacktrace.
Eigene Fehlerklassen
Ergebnis
true name: Name fehlt alter: Alter negativ
Fehlerursache mitgeben
Ergebnis
Konfiguration ungültig <- SyntaxError
Fehler in async-Code
In async-Funktionen fängst du Fehler mit try/catch rund um await, bei Promises mit .catch() (siehe nächste Kapitel). Ein try/catch um einen Timer-Callback fängt dessen Fehler nicht, weil der später und woanders läuft.
Defensiv programmieren
- Eingaben prüfen, bevor du sie benutzt
?.und??gegen fehlende Werte einsetzen- Fehler nicht stillschweigend verschlucken: mindestens loggen
- Nur Fehler fangen, die du auch behandeln kannst
Merke
try { } catch (e) { } finally { }fängt Fehler ab und räumt aufthrow new Error("Text")löst Fehler aus- Fehlertypen:
TypeError,ReferenceError,RangeError,SyntaxError - Eigene Fehler:
class X extends Error - Fehler nicht verschlucken, unbekannte weiterreichen
Aufgabe
Schreibe eine Funktion leseZahl(text), die bei ungültiger Eingabe einen eigenen Fehler wirft, und fange ihn in einer Schleife über mehrere Eingaben ab.