Error
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
* Some parts of this feature may have varying levels of support.
Error
-Objekte werden geworfen, wenn Laufzeitfehler auftreten. Das Error
-Objekt kann auch als Basisobjekt für benutzerdefinierte Ausnahmen verwendet werden. Siehe unten für standardmäßig integrierte Fehlertypen.
Beschreibung
Laufzeitfehler führen dazu, dass neue Error
-Objekte erstellt und geworfen werden.
Error
ist ein serialisierbares Objekt, sodass es mit structuredClone()
geklont oder zwischen Workers mit postMessage()
kopiert werden kann.
Fehlertypen
Neben dem generischen Error
-Konstruktor gibt es weitere grundlegende Fehlerkonstruktoren in JavaScript. Für clientseitige Ausnahmen siehe Ausdruckshandhabungsanweisungen.
EvalError
-
Erstellt eine Instanz, die einen Fehler darstellt, der im Zusammenhang mit der globalen Funktion
eval()
auftritt. RangeError
-
Erstellt eine Instanz, die einen Fehler darstellt, der auftritt, wenn eine numerische Variable oder ein Parameter außerhalb des gültigen Bereichs liegt.
ReferenceError
-
Erstellt eine Instanz, die einen Fehler darstellt, der auftritt, wenn eine ungültige Referenz dereferenziert wird.
SyntaxError
-
Erstellt eine Instanz, die einen Syntaxfehler darstellt.
TypeError
-
Erstellt eine Instanz, die einen Fehler darstellt, der auftritt, wenn eine Variable oder ein Parameter nicht vom gültigen Typ ist.
URIError
-
Erstellt eine Instanz, die einen Fehler darstellt, der auftritt, wenn
encodeURI()
oderdecodeURI()
ungültige Parameter übergeben werden. AggregateError
-
Erstellt eine Instanz, die mehrere Fehler in einem einzigen Fehler eingeschlossen darstellt, wenn eine Operation mehrere Fehler melden muss, z.B. durch
Promise.any()
. InternalError
Nicht standardisiert-
Erstellt eine Instanz, die einen Fehler darstellt, der auftritt, wenn ein interner Fehler in der JavaScript-Engine geworfen wird, z.B. "zuviel Rekursion".
Konstruktor
Error()
-
Erstellt ein neues
Error
-Objekt.
Statische Eigenschaften
Error.stackTraceLimit
Nicht standardisiert-
Eine nicht standardisierte numerische Eigenschaft, die festlegt, wie viele Stapelrahmen in einer Fehlerstackverfolgung enthalten sein sollen.
Statische Methoden
Error.captureStackTrace()
Nicht standardisiert-
Eine nicht standardisierte Funktion, die die
stack
-Eigenschaft für das bereitgestellte Objekt erstellt. Error.isError()
-
Gibt
true
zurück, wenn das Argument ein Fehler ist, oderfalse
andernfalls. Error.prepareStackTrace()
Nicht standardisiert Optional-
Eine nicht standardisierte Funktion, die, falls vom Benutzer bereitgestellt, von der JavaScript-Engine für geworfene Ausnahmen aufgerufen wird und es dem Benutzer ermöglicht, eine benutzerdefinierte Formatierung für Stackverfolgungen bereitzustellen. Siehe die V8 Stack Trace API-Dokumentation.
Instanz-Eigenschaften
Diese Eigenschaften sind auf Error.prototype
definiert und werden von allen Error
-Instanzen gemeinsam genutzt.
Error.prototype.constructor
-
Die Konstrukturfunktion, die das Instanzobjekt erstellt hat. Für
Error
-Instanzen ist der Anfangswert derError
-Konstruktor. Error.prototype.name
-
Repräsentiert den Namen für den Fehlertyp. Für
Error.prototype.name
ist der Anfangswert"Error"
. Unterklassen wieTypeError
undSyntaxError
stellen ihre eigenenname
-Eigenschaften bereit. Error.prototype.stack
Nicht standardisiert-
Eine nicht standardisierte Eigenschaft für eine Stapelverfolgung.
Diese Eigenschaften sind eigene Eigenschaften jeder Error
-Instanz.
cause
-
Fehlerursache, die den Grund angibt, warum der aktuelle Fehler geworfen wird — normalerweise ein anderer abgefangener Fehler. Bei benutzererstellten
Error
-Objekten ist dies der Wert, der alscause
-Eigenschaft des zweiten Arguments des Konstruktors bereitgestellt wird. columnNumber
Nicht standardisiert-
Eine nicht standardisierte Mozilla-Eigenschaft für die Spaltennummer in der Zeile, die diesen Fehler verursacht hat.
fileName
Nicht standardisiert-
Eine nicht standardisierte Mozilla-Eigenschaft für den Pfad zur Datei, die diesen Fehler verursacht hat.
lineNumber
Nicht standardisiert-
Eine nicht standardisierte Mozilla-Eigenschaft für die Zeilennummer in der Datei, die diesen Fehler verursacht hat.
message
-
Fehlermeldung. Bei benutzererstellten
Error
-Objekten ist dies der Zeichenfolgenwert, der als erstes Argument des Konstruktors bereitgestellt wird.
Instanzmethoden
Error.prototype.toString()
-
Gibt eine Zeichenfolge zurück, die das angegebene Objekt darstellt. Überschreibt die
Object.prototype.toString()
-Methode.
Beispiele
Werfen eines generischen Fehlers
In der Regel erstellen Sie ein Error
-Objekt mit der Absicht, es mit dem throw
-Schlüsselwort zu werfen. Sie können den Fehler mit der try...catch
-Konstruktion behandeln:
try {
throw new Error("Whoops!");
} catch (e) {
console.error(`${e.name}: ${e.message}`);
}
Behandlung eines bestimmten Fehlertyps
Sie können wählen, nur bestimmte Fehlertypen zu behandeln, indem Sie den Fehlertyp mit dem instanceof
-Operator 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 fehlschlagen, die eine unterschiedliche Handhabung erfordern, aber sehr ähnliche Fehler werfen (d. h. mit demselben Typ und derselben Nachricht).
Wenn Sie keine Kontrolle über die ursprünglich geworfenen Fehler haben, ist eine Option, sie abzufangen und neue Error
-Objekte zu werfen, die spezifischere Nachrichten haben. Der ursprüngliche Fehler sollte dem neuen Error
im options
-Parameter des Konstruktors als cause
-Eigenschaft übergeben werden. Dies stellt sicher, dass der ursprüngliche Fehler und die Stackverfolgung für höherstufige try/catch-Blöcke verfügbar sind.
Das folgende Beispiel zeigt dies für zwei Methoden, die ansonsten mit ähnlichen Fehlern fehlschlagen würden (doFailSomeWay()
und doFailAnotherWay()
):
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 sich darauf beschränken, Fehlerursachen zu verwenden, um zwischen verschiedenen ausgegebenen Fehlern zu unterscheiden, anstatt Ihre Benutzer zu bitten, die Fehlermeldung zu analysieren. Sehen Sie sich die Fehlerursachenseite für ein Beispiel an.
Benutzerdefinierte Fehlertypen können auch die cause
-Eigenschaft verwenden, vorausgesetzt, der Konstruktor der Unterklassen übergibt den options
-Parameter beim Aufruf von super()
. Der Error()
-Basisklassen-Konstruktor wird options.cause
lesen und die cause
-Eigenschaft auf 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: cause
Benutzerdefinierte Fehlertypen
Es kann sinnvoll sein, eigene Fehlertypen abzuleiten, die von Error
erben, um throw new MyError()
verwenden zu können und mit instanceof MyError
zu prüfen, welche Art von Fehler im Ausnahmehandler vorliegt. Das ergibt saubereren und konsistenteren Fehlerbehandlungscode.
Lesen Sie "What's a good way to extend Error in JavaScript?" auf Stack Overflow für eine ausführliche Diskussion.
Warnung:
Eingebaute Subclassing-Mechanismen können nicht zuverlässig zu Pre-ES6-Code transpiliert werden, da es keine Möglichkeit gibt, die Basisklasse mit einem bestimmten new.target
ohne Reflect.construct()
zu konstruieren. Sie benötigen zusätzliche Konfiguration oder müssen manuell Object.setPrototypeOf(this, CustomError.prototype)
am Ende des Konstruktors aufrufen; andernfalls wird die erstellte Instanz keine CustomError
-Instanz sein. Siehe die TypeScript-FAQ für weitere Informationen.
Hinweis:
Einige Browser schließen den CustomError
-Konstruktor in die Stapelverfolgung ein, 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® 2025 Language Specification # sec-error-objects |
Browser-Kompatibilität
BCD tables only load in the browser