Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
throw
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Diethrow-Anweisung löst eine benutzerdefinierte Ausnahme aus. Die Ausführung der aktuellen Funktion wird gestoppt (die Anweisungen nachthrow werden nicht ausgeführt) und die Kontrolle wird an den erstencatch-Block im Aufrufstapel übergeben. Wenn keincatch-Block unter den aufrufenden Funktionen existiert, wird das Programm beendet.
In diesem Artikel
Probieren Sie es aus
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!}Syntax
throw expression;expressionDer Ausdruck, der geworfen werden soll.
Beschreibung
Diethrow-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 unterAblaufsteuerung und Fehlerbehandlung.
Dasthrow-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 objectIn der Praxis sollte die von Ihnen geworfene Ausnahmeimmer einError-Objekt oder eine Instanz einerError-Unterklasse wie z.B.RangeError sein. Dies liegt daran, dass Code, der den Fehler auffängt, möglicherweise erwartet, dass bestimmte Eigenschaften wiemessage im aufgefangenen Wert vorhanden sind. Web-APIs werfen beispielsweise typischerweiseDOMException-Instanzen, die vonError.prototype erben.
Automatische Semikolon-Einfügung
Die Syntax verbietet Zeilenumbrüche zwischen demthrow-Schlüsselwort und dem zu werfenden Ausdruck.
thrownew Error();Der obige Code wird durch dieautomatische Semikolon-Einfügung (ASI) umgewandelt in:
throw;new Error();Dies ist ungültiger Code, da im Gegensatz zureturnthrow von einem Ausdruck gefolgt werden muss.
Um dieses Problem zu vermeiden (um ASI zu verhindern), könnten Sie Klammern verwenden:
throw ( new Error());Beispiele
>Werfen eines benutzerdefinierten Fehlers
Dieses Beispiel definiert eine Funktion, die einenTypeError wirft, wenn die Eingabe nicht vom erwarteten Typ ist.
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)); // 6try { sum("1", "2");} catch (e) { console.error(e); // TypeError: Can only add numbers}Werfen eines vorhandenen Objekts
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) diereadFile-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 denPromise()-Konstruktor verwenden.
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);}Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-throw-statement> |