Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 142

5.5.6throw

Оглавление

Eine Ausnahme (Exception) ist ein Signal, das anzeigt, dass ein außergewöhnlicher Zustand oder Fehler aufgetreten ist. Löst man eine Ausnahme aus, signalisiert man damit einen solchen Fehler bzw. außergewöhnlichen Zustand. (Im Englischen »wirft« man eine Ausnahme: to throw an exception.) Ausgelöste Ausnahmen fängt man ab (to catch an exception), um sie zu behandeln – also um Handlungen vorzunehmen, die erforderlich oder geeignet sind, um die Ausnahmesituation zu beheben. In JavaScript werden Ausnahmen ausgelöst, wenn ein Laufzeitfehler auftritt oder wenn das Programm sie mithilfe der throw-Anweisung explizit auslöst. Ausnahmen werden mit der try/catch/finally-Anweisung abgefangen, die im nächsten Abschnitt beschrieben wird.

Die throw-Anweisung hat folgende Syntax:

throw Ausdruck;

Ausdruck kann zu einem Wert eines beliebigen Typs ausgewertet werden. Sie können eine Zahl verwenden, die einen Fehlercode repräsentiert, oder einen String, der eine lesbare Fehlermeldung enthält. Die Klasse Error und ihre Unterklassen werden verwendet, wenn der JavaScript-Interpreter einen Fehler auslöst – Sie können sie aber auch selbst benutzen. Ein Error-Objekt hat eine name-Eigenschaft, die den Fehlertyp angibt, und eine message-Eigenschaft, die den String enthält, der der Konstruktorfunktion übergeben wurde. Hier eine Beispielfunktion, die ein Error-Objekt »wirft«, wenn sie mit einem ungültigen Argument aufgerufen wird:

function factorial(x) {

// Wenn das Eingabeargument ungültig ist, wird eine Ausnahme ausgelöst!

if (x < 0) throw new Error("x must not be negative");

// Andernfalls berechnen wir einen Wert und kehren auf übliche Weise zurück.

let f;

for(f = 1; x > 1; f *= x, x--) /* l eer */ ;

return f;

}

factorial(4) // => 24

Wenn eine Ausnahme ausgelöst wird, beendet der JavaScript-Interpreter sofort die normale Programmausführung und springt zum nächsten Exceptionhandler. Exceptionhandler werden mithilfe der catch-Klausel der try/catch/finally-Anweisung verfasst, die im nächsten Abschnitt beschrieben wird. Wenn mit dem Codeblock, in dem die Ausnahme ausgelöst wurde, keine catch-Klausel verbunden ist, prüft der Interpreter, ob der nächste umgebende Codeblock einen Exceptionhandler besitzt. Das wird so lange fortgesetzt, bis ein Exceptionhandler gefunden wurde. Wird eine Ausnahme in einer Funktion ausgelöst, die keine eigene try/catch/finally-Anweisung zur Ausnahmebehandlung besitzt, wird die Ausnahme an den aufrufenden Code durchgereicht. Auf diese Weise durchlaufen Ausnahmen die lexikalische Struktur von JavaScript-Methoden und den Aufrufstapel von unten nach oben. Wird kein Exceptionhandler gefunden, wird die Ausnahme als Fehler behandelt und dem Benutzer gemeldet.

JavaScript  –  Das Handbuch für die Praxis

Подняться наверх