| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/throw | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Juli 2015 browserbergreifend verfgbar.
Die throw-Anweisung lst eine benutzerdefinierte Ausnahme aus. Die Ausfhrung der aktuellen Funktion wird gestoppt (die Anweisungen nach throw werden nicht ausgefhrt) 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.
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;
expressionDer Ausdruck, der geworfen werden soll.
Die throw-Anweisung ist in allen Kontexten gltig, in denen Anweisungen verwendet werden knnen. Ihre Ausfhrung erzeugt eine Ausnahme, die durch den Aufrufstapel dringt. Weitere Informationen zum Fehler-Bubbling und zur Fehlerbehandlung finden Sie unter Ablaufsteuerung und Fehlerbehandlung.
Das throw-Schlsselwort 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 auffngt, mglicherweise erwartet, dass bestimmte Eigenschaften wie message im aufgefangenen Wert vorhanden sind. Web-APIs werfen beispielsweise typischerweise DOMException-Instanzen, die von Error.prototype erben.
Die Syntax verbietet Zeilenumbrche zwischen dem throw-Schlsselwort und dem zu werfenden Ausdruck.
throw
new Error();
Der obige Code wird durch die automatische Semikolon-Einfgung (ASI) umgewandelt in:
throw;
new Error();
Dies ist ungltiger Code, da im Gegensatz zu return throw von einem Ausdruck gefolgt werden muss.
Um dieses Problem zu vermeiden (um ASI zu verhindern), knnten Sie Klammern verwenden:
throw (
new Error()
);
Dieses Beispiel definiert eine Funktion, die einen TypeError 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)); // 6
try {
sum("1", "2");
} catch (e) {
console.error(e); // TypeError: Can only add numbers
}
Dieses Beispiel ruft eine asynchrone Funktion, die auf Rckrufe basiert, auf und wirft einen Fehler, wenn der Rckruf einen Fehler erhlt.
readFile("foo.txt", (err, data) => {
if (err) {
throw err;
}
console.log(data);
});
Fehler, die auf diese Weise geworfen werden, knnen vom Aufrufer nicht abgefangen werden und fhren zum Absturz des Programms, es sei denn, (a) die readFile-Funktion fngt den Fehler selbst ab oder (b) das Programm luft in einem Kontext, der Top-Level-Fehler auffngt. Sie knnen Fehler natrlicher handhaben, indem Sie den Promise()-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);
}
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-throw-statement |
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |