HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
View in English Always switch to English
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die throw-Anweisung löst eine benutzerdefinierte Ausnahme aus. Die Ausführung der aktuellen Funktion wird gestoppt (die Anweisungen nach throw werden nicht ausgeführt) und die Kontrolle wird an den ersten catch-Block im Aufrufstapel übergeben. Wenn kein catch-Block unter den aufrufenden Funktionen existiert, wird das Programm beendet.
throw
catch
function getRectArea(width, height) { if (isNaN(width) || isNaN(height)) { throw new Error("Parameter is not a number!"); } } try { getRectArea(3, "A"); } catch (e) { console.error(e); // Expected output: Error: Parameter is not a number! }
throw expression;
expression
Der Ausdruck, der geworfen werden soll.
Die throw-Anweisung ist in allen Kontexten gültig, in denen Anweisungen verwendet werden können. Ihre Ausführung erzeugt eine Ausnahme, die durch den Aufrufstapel dringt. Weitere Informationen zum Fehler-Bubbling und zur Fehlerbehandlung finden Sie unter Ablaufsteuerung und Fehlerbehandlung.
Das throw-Schlüsselwort kann von jeder Art von Ausdruck gefolgt werden, zum Beispiel:
throw error; // Throws a previously defined value (e.g. within a catch block) throw new Error("Required"); // Throws a new Error object
In der Praxis sollte die von Ihnen geworfene Ausnahme immer ein Error-Objekt oder eine Instanz einer Error-Unterklasse wie z.B. RangeError sein. Dies liegt daran, dass Code, der den Fehler auffängt, möglicherweise erwartet, dass bestimmte Eigenschaften wie message im aufgefangenen Wert vorhanden sind. Web-APIs werfen beispielsweise typischerweise DOMException-Instanzen, die von Error.prototype erben.
Error
RangeError
message
DOMException
Error.prototype
Die Syntax verbietet Zeilenumbrüche zwischen dem throw-Schlüsselwort und dem zu werfenden Ausdruck.
throw new Error();
Der obige Code wird durch die automatische Semikolon-Einfügung (ASI) umgewandelt in:
throw; new Error();
Dies ist ungültiger Code, da im Gegensatz zu return throw von einem Ausdruck gefolgt werden muss.
return
Um dieses Problem zu vermeiden (um ASI zu verhindern), könnten Sie Klammern verwenden:
throw ( new Error() );
Dieses Beispiel definiert eine Funktion, die einen TypeError wirft, wenn die Eingabe nicht vom erwarteten Typ ist.
TypeError
function isNumeric(x) { return ["number", "bigint"].includes(typeof x); } function sum(...values) { if (!values.every(isNumeric)) { throw new TypeError("Can only add numbers"); } return values.reduce((a, b) => a + b); } console.log(sum(1, 2, 3)); // 6 try { sum("1", "2"); } catch (e) { console.error(e); // TypeError: Can only add numbers }
Dieses Beispiel ruft eine asynchrone Funktion, die auf Rückrufe basiert, auf und wirft einen Fehler, wenn der Rückruf einen Fehler erhält.
readFile("foo.txt", (err, data) => { if (err) { throw err; } console.log(data); });
Fehler, die auf diese Weise geworfen werden, können vom Aufrufer nicht abgefangen werden und führen zum Absturz des Programms, es sei denn, (a) die readFile-Funktion fängt den Fehler selbst ab oder (b) das Programm läuft in einem Kontext, der Top-Level-Fehler auffängt. Sie können Fehler natürlicher handhaben, indem Sie den Promise()-Konstruktor verwenden.
readFile
Promise()
function readFilePromise(path) { return new Promise((resolve, reject) => { readFile(path, (err, data) => { if (err) { reject(err); } resolve(data); }); }); } try { const data = await readFilePromise("foo.txt"); console.log(data); } catch (err) { console.error(err); }
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
try...catch