Fehler sind nützlich, um zu melden, dass in einem Programm oder in einem Codeabschnitt etwas nicht stimmt oder unerwartet passiert.
Sie sind JavaScript-Objekte.
Die wichtigste Eigenschaft dieses Objekts ist message:
const error = new Error('Oops, something went wrong');
console.log(error.message);
// => "Oops, something went wrong"
Mit der throw-Syntax kannst du einen Error werfen.
throw new Error('Oops');
Wenn ein Fehler geworfen wird, wird die aktuelle Ausführung gestoppt und im ersten catch-Block des Aufrufstapels fortgesetzt.
try {
throw new Error('Oops');
} catch (error) {
console.log(error.message);
// => "Oops"
}
Wie bei jeder Klasse in JavaScript können Unterklassen von Error erben, um mit dem Schlüsselwort extends eigene Fehlertypen zu erstellen.
Mit der instanceof-Syntax kannst du prüfen, ob der abgefangene Fehler eine Instanz einer bestimmten Unterklasse von Error ist.
class CustomError extends Error {}
try {
// ... Code that may throw an error
} catch (error) {
if (error instanceof CustomError) {
console.log('The error thrown is an instance of the CustomError');
}
}
Neben dem Error-Objekt gibt es noch weitere eingebaute Fehlerobjekte. Mehr darüber erfährst du hier.
Du kannst auch deinen eigenen benutzerdefinierten Fehlertyp definieren, indem du eine Klasse erstellst, die von einem der eingebauten Fehlertypen erbt.
class MyCustomError extends Error {}
Die throw-Syntax wird zwar meistens verwendet, um ein Error-Objekt zu werfen, aber JavaScript ist flexibel und lässt dich auch einen string, ein null oder jeden primitiven Typ werfen.
Auch wenn das in JavaScript nicht Standard ist, implementieren die meisten JavaScript-Umgebungen eine stack-Eigenschaft für die Error-Objekte, mit der du den Stacktrace des geworfenen Fehlers abrufen kannst.