Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Fehler
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.
* Some parts of this feature may have varying levels of support.
Error-Objekte werden ausgelöst, wenn Laufzeitfehler auftreten. DasError-Objekt kann auch als Basisobjekt für benutzerdefinierte Ausnahmen verwendet werden. Siehe unten für standardmäßig eingebaute Fehlertypen.
In diesem Artikel
Beschreibung
Laufzeitfehler führen zur Erstellung und zum Auslösen neuerError-Objekte.
Error ist einserialisierbares Objekt und kann daher mitstructuredClone() geklont oder mitpostMessage() zwischenWorkers kopiert werden.
Fehlertypen
Neben dem allgemeinenError-Konstruktor gibt es andere Kernfehlerkonstruktoren in JavaScript. Für clientseitige Ausnahmen sieheAusnahmekontrollanweisungen.
EvalErrorErstellt eine Instanz, die einen Fehler darstellt, der im Zusammenhang mit der globalen Funktion
eval()auftritt.RangeErrorErstellt eine Instanz, die einen Fehler darstellt, der auftritt, wenn eine numerische Variable oder ein Parameter außerhalb des gültigen Bereichs liegt.
ReferenceErrorErstellt eine Instanz, die einen Fehler darstellt, der auftritt, wenn auf eine ungültige Referenz zugegriffen wird.
SyntaxErrorErstellt eine Instanz, die einen Syntaxfehler darstellt.
TypeErrorErstellt eine Instanz, die einen Fehler darstellt, der auftritt, wenn eine Variable oder ein Parameter nicht vom gültigen Typ ist.
URIErrorErstellt eine Instanz, die einen Fehler darstellt, der auftritt, wenn
encodeURI()oderdecodeURI()ungültige Parameter übergeben werden.AggregateErrorErstellt eine Instanz, die mehrere Fehler in einem einzigen Fehler zusammenfasst, wenn eine Operation mehrere Fehler berichten muss, zum Beispiel durch
Promise.any().InternalErrorNicht standardisiertErstellt eine Instanz, die einen Fehler darstellt, der auftritt, wenn ein interner Fehler in der JavaScript-Engine ausgelöst wird, z.B. "zu viel Rekursion".
Konstruktor
Error()Erstellt ein neues
Error-Objekt.
Statische Eigenschaften
Error.stackTraceLimitNicht standardisiertEine nicht-standard numerische Eigenschaft, die begrenzt, wie viele Stack-Frames in einem Fehler-Stack-Trace enthalten sein sollen.
Statische Methoden
Error.captureStackTrace()Eine nicht-standard Funktion, die die
stack-Eigenschaft auf dem bereitgestellten Objekt erstellt.Error.isError()Gibt
truezurück, wenn das Argument ein Fehler ist, oderfalseanderenfalls.Error.prepareStackTrace()Nicht standardisiertOptionalEine nicht-standard Funktion, die, wenn sie von Benutzer-Code bereitgestellt wird, von der JavaScript-Engine für ausgelöste Ausnahmen aufgerufen wird, um dem Benutzer zu ermöglichen, benutzerdefinierte Formatierungen für Stack-Traces bereitzustellen. Siehe dieV8 Stack Trace API Dokumentation.
Instanzeigenschaften
Diese Eigenschaften sind aufError.prototype definiert und werden von allenError-Instanzen geteilt.
Error.prototype.constructorDie Konstruktorfunktion, die das Instanzobjekt erstellt hat. Für
Error-Instanzen ist der Anfangswert derError-Konstruktor.Error.prototype.nameRepräsentiert den Namen für die Art des Fehlers. Für
Error.prototype.nameist der Anfangswert"Error". Unterklassen wieTypeErrorundSyntaxErrorbieten ihre eigenenname-Eigenschaften.Error.prototype.stackNicht standardisiertEine nicht-standard Eigenschaft für einen Stack-Trace.
Diese Eigenschaften sind eigene Eigenschaften jederError-Instanz.
causeFehlerursache, die den Grund angibt, warum der aktuelle Fehler ausgelöst wird — normalerweise ein anderer gefangener Fehler. Bei benutzererstellten
Error-Objekten ist dies der Wert, der als diecause-Eigenschaft des zweiten Arguments des Konstruktors bereitgestellt wird.columnNumberNicht standardisiertEine nicht-standard Mozilla-Eigenschaft für die Spaltennummer in der Zeile, die diesen Fehler ausgelöst hat.
fileNameNicht standardisiertEine nicht-standard Mozilla-Eigenschaft für den Pfad zur Datei, die diesen Fehler ausgelöst hat.
lineNumberNicht standardisiertEine nicht-standard Mozilla-Eigenschaft für die Zeilennummer in der Datei, die diesen Fehler ausgelöst hat.
messageFehlermeldung. Bei benutzererstellten
Error-Objekten ist dies der String, der als erstes Argument des Konstruktors bereitgestellt wird.
Instanzmethoden
Error.prototype.toString()Gibt einen String zurück, der das spezifizierte Objekt darstellt. Überschreibt die
Object.prototype.toString()-Methode.
Beispiele
>Werfen eines allgemeinen Fehlers
Normalerweise erstellt man einError-Objekt mit der Absicht, es mit demthrow-Schlüsselwort auszulösen.Sie können den Fehler mit dertry...catch-Konstruktion behandeln:
try { throw new Error("Whoops!");} catch (e) { console.error(`${e.name}: ${e.message}`);}Behandlung eines spezifischen Fehlertyps
Sie können sich dafür entscheiden, nur spezifische Fehlertypen zu behandeln, indem Sie den Fehlertyp mit deminstanceof-Schlüsselwort testen:
try { foo.bar();} catch (e) { if (e instanceof EvalError) { console.error(`${e.name}: ${e.message}`); } else if (e instanceof RangeError) { console.error(`${e.name}: ${e.message}`); } // etc. else { // If none of our cases matched leave the Error unhandled throw e; }}Unterscheidung zwischen ähnlichen Fehlern
Manchmal kann ein Codeblock aus Gründen scheitern, die eine unterschiedliche Behandlung erfordern, aber sehr ähnliche Fehler werfen (d.h. mit demselben Typ und derselben Meldung).
Wenn Sie keine Kontrolle über die ursprünglich geworfenen Fehler haben, ist eine Möglichkeit, sie abzufangen und neueError-Objekte mit spezifischeren Nachrichten zu werfen.Der ursprüngliche Fehler sollte imoptions-Parameter des Konstruktors als seinecause-Eigenschaft an das neueError übergeben werden. Dies stellt sicher, dass der ursprüngliche Fehler und der Stack-Trace für höherstufige try/catch-Blöcke verfügbar sind.
Das folgende Beispiel zeigt dies für zwei Methoden, die andernfalls mit ähnlichen Fehlern scheitern würden (doFailSomeWay() unddoFailAnotherWay()):
function doWork() { try { doFailSomeWay(); } catch (err) { throw new Error("Failed in some way", { cause: err }); } try { doFailAnotherWay(); } catch (err) { throw new Error("Failed in another way", { cause: err }); }}try { doWork();} catch (err) { switch (err.message) { case "Failed in some way": handleFailSomeWay(err.cause); break; case "Failed in another way": handleFailAnotherWay(err.cause); break; }}Hinweis:Wenn Sie eine Bibliothek erstellen, sollten Sie es bevorzugen, die Fehlerursache zu verwenden, um zwischen verschiedenen ausgegebenen Fehlern zu unterscheiden — anstatt von Ihren Nutzern zu verlangen, die Fehlermeldung zu analysieren. Siehe dieError Cause-Seite für ein Beispiel.
Benutzerdefinierte Fehlertypen können ebenfalls diecause-Eigenschaft verwenden, vorausgesetzt, dass der Konstruktor der Unterklassen denoptions-Parameter beim Aufruf vonsuper() übergibt. DerError()-Basis-Konstruktor wirdoptions.cause lesen und diecause-Eigenschaft an der neuen Fehlerinstanz definieren.
class MyError extends Error { constructor(message, options) { // Need to pass `options` as the second parameter to install the "cause" property. super(message, options); }}console.log(new MyError("test", { cause: new Error("cause") }).cause);// Error: causeBenutzerdefinierte Fehlertypen
Sie könnten Ihre eigenen Fehlertypen definieren, die sich vonError ableiten, umthrow new MyError() nutzen zu können und mitinstanceof MyError die Art des Fehlers im Ausnahmebehandler zu überprüfen. Dies führt zu saubererem und konsistenterem Fehlerbehandlungscode.
Siehe"What's a good way to extend Error in JavaScript?" auf Stack Overflow für eine eingehende Diskussion.
Warnung:Eingebaute Vererbungen können nicht zuverlässig in Code vor-ES6 transpiliert werden, da es keine Möglichkeit gibt, die Basisklasse mit einem bestimmtennew.target ohneReflect.construct() zu konstruieren. Sie benötigenzusätzliche Konfiguration oder rufen manuellObject.setPrototypeOf(this, CustomError.prototype) am Ende des Konstruktors auf; andernfalls wird die konstruierte Instanz nicht eineCustomError-Instanz sein. Siehedie TypeScript FAQ für mehr Informationen.
Hinweis:Einige Browser beinhalten denCustomError-Konstruktor im Stack-Trace, wenn ES2015-Klassen verwendet werden.
class CustomError extends Error { constructor(foo = "bar", ...params) { // Pass remaining arguments (including vendor specific ones) to parent constructor super(...params); // Maintains proper stack trace for where our error was thrown (non-standard) if (Error.captureStackTrace) { Error.captureStackTrace(this, CustomError); } this.name = "CustomError"; // Custom debugging information this.foo = foo; this.date = new Date(); }}try { throw new CustomError("baz", "bazMessage");} catch (e) { console.error(e.name); // CustomError console.error(e.foo); // baz console.error(e.message); // bazMessage console.error(e.stack); // stack trace}Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-error-objects> |