Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Anweisungen und Deklarationen
  5. throw

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

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.

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

js
throw expression;
expression

Der 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:

js
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 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.

js
thrownew Error();

Der obige Code wird durch dieautomatische Semikolon-Einfügung (ASI) umgewandelt in:

js
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:

js
throw (  new Error());

Beispiele

Werfen eines benutzerdefinierten Fehlers

Dieses Beispiel definiert eine Funktion, die einenTypeError wirft, wenn die Eingabe nicht vom erwarteten Typ ist.

js
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.

js
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.

js
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

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp