Der Error Konstruktor erstellt ein Fehler (Error) Objekt. Instanzen von Error Objekten werden geworfen (thrown), wenn zur Laufzeit ein Fehler auftritt. Das Error Objekt kann zudem als Basis für benutzerdefinierte Fehler benutzt werden. Weiter unten werden schon eingebaute Fehlertypen beschrieben.
Syntax
new Error([message[, fileName[, lineNumber]]])
Parameter
message- Optional. Für Menschen lesbare Beschreibung des Errors.
fileName- Optional. Der Wert für die
fileNameEigenschaft eines erstelltenErrorObjekts. Der Standardwert ist der Name der Datei, in dem der QuelltextError()aufgerufen wird. lineNumber- Optional. Der Wert für die
lineNumberEigenschaft eines erstelltenErrorObjekts. Der Standardwert ist die Zeilennummer, in dem der QuelltextError()aufgerufen wird.
Beschreibung
Laufzeitfehler resultieren in einem neu erstellten und geworfenen Error Objekt.
Diese Seite Dokumentiert den Einsatz des Error Objektes und den Einsatz als Konstruktorfunktion. Für eine Liste der Eigenschaften und Methoden, die eine Error Instanz erbt, siehe auf der Seite Error.prototype.
Einsatz als Funktion
Wenn Error als Funktion genutzt wird -- ohne new, wird diese ein Error Objekt zurückgeben. Daher wird der Aufruf der Funktion das gleiche zurückgeben wie der Aufruf des Error Konstruktors (mit new Schlüsselwort).
// dieser Aufruf:
const x = Error('Ich wurde mit einem Funktionsaufruf erstellt!');
// hat die gleiche Funktion wie folgender:
const y = new Error('Ich wurde mit dem "new" Schlüsselwort erstellt!');
Fehlertypen
Neben dem generischen Error Konstruktor sind in JavaScript noch sieben weitere Error-Konstruktoren eingebaut. Für benutzerdefinierte Fehler siehe Statements zur Fehler- und Ausnahmebehandlung.
EvalError- Erstellt eine Instanz, die einen Fehler repräsentiert, der bei der globalen
eval()Funktion auftritt. InternalError- Erstellt eine Instanz, die einen Fehler repräsentiert, der auftritt, wenn ein interner Fehler in JavaScript auftaucht (z. B. zu viel Rekursion).
RangeError- Erstellt eine Instanz, die einen Fehler repräsentiert, der auftritt, wenn eine nummerische Variable oder ein nummerischer Parameter außerhalb seiner validen Grenzen ist.
ReferenceError- Erstellt eine Instanz, die einen Fehler repräsentiert, der auftritt, wenn eine nicht valide Referenz referenziert werden soll.
SyntaxError- Erstellt eine Instanz, die einen Fehler repräsentiert, der auftritt, wenn die Syntax von Quellcode, der in der
eval()Funktion übergeben wird, nicht richtig ist. TypeError- Erstellt eine Instanz, die einen Fehler repräsentiert, der auftritt, wenn eine Variable oder ein Parameter einen nicht validen Typen enthält.
URIError- Erstellt ein Instanz, die einen Fehler repräsentiert, der auftritt, wenn die Methode
encodeURI()oderdecodeURI()nicht valide Parameter übergeben bekommt.
Eigenschaften
Error.prototype- Erlaubt es die Eigenschaften aller
ErrorInstanzen zu verändern.
Methoden
Das globale Error Objekt besitzt keine eigenen Methoden. Stattdessen erbt es einige Methoden durch die Prototypenkette.
Error Instanzen
Alle Error Instanzen und Instanzen von nicht generischen Errors erben von Error.prototype. Wie bei jeder Konstruktorfunktion, kann man den Prototypen des Konstruktors einsetzen, um Eigenschaften oder Methoden bei allen erstellten Instanzen hinzuzufügen.
Eigenschaften
Standard-Eigenschaften
Error.prototype.constructor- Spezifiziert die Funktion, die einen Prototypen einer Instanz erstellt.
Error.prototype.message- Errornachricht.
Error.prototype.name- Errorname.
Vendor-spezifische Erweiterungen
Kein Standard
Diese Funktion entspricht nicht dem Standard und ist nicht Teil der Standardisierung. Diese Funktion darf nicht in Webseiten, die via das Internet zugänglich sind, benutzt werden: Sie wird nicht für alle Nutzer funktionieren. Es kann zu umfangreichen Inkompatibilitäten zwischen verschiedenen Implementierungen kommen und die Funktionsweise oder Eigenschaften könnten in der Zukunft verändert werden.
Microsoft
Error.prototype.description- Errorbeschreibung. Ist das gleiche wie
Error.prototype.message Error.prototype.number- Errornummer.
Mozilla
Error.prototype.fileName- Pfad zu der Datei, die der der Error ausgelöst wurde.
Error.prototype.lineNumber- Zeilennummer in der Datei, in der der Error ausgelöst wurde.
Error.prototype.columnNumber- Spaltennummer in der Zeile, in der der Error ausgelöst wurde.
Error.prototype.stack- Stacktrace.
Methoden
Error.prototype.toSource()- Gibt einen String zurück, der den Quelltext eines spezifischen
ErrorObjektes beinhaltet. Man kann diesen einsetzen, um ein neues Objekt zu erstellen. Überschreibt dieObject.prototype.toSource()Methode. Error.prototype.toString()- Gibt einen String zurück, der das Objekt repräsentiert. Überschreibt die
Object.prototype.toString()Methode.
Beispiele
Werfen eines generischen Errors
Typischerweise erstellt man ein Error Objekt mit der Intention es mit dem throw Schlüsselwort zu werfen. Man kann den Fehler auffangen, indem man ein try...catch Konstrukt benutzt.
try {
throw new Error('Whoops!');
} catch (e) {
console.log(e.name + ': ' + e.message);
}
Einen Spezifischen Error behandeln
Man kann sich aussuchen, welche spezifischen Fehlertypen behandelt werden sollen, indem man die constructor Eigenschaft des Errors abfragt. In modernen JavaScript-Umgebungen kann stattdessen das instanceof Schlüsselwort verwendet werden:
try {
foo.bar();
} catch (e) {
if (e instanceof EvalError) {
console.log(e.name + ': ' + e.message);
} else if (e instanceof RangeError) {
console.log(e.name + ': ' + e.message);
}
// ... etc
}
Benutzerdefinierte Fehlertypen
Manchmal möchte man aber einen eigenen Error erstellen, der von Error abgeleitet ist, durch den Aufruf throw new CustomError() geworfen werden kann und durch instanceof CustomError abgefragt werden kann. Eigene Fehlertypen führen zu einer besseren und konsistenten Fehlerbehandlung. Für eine tiefer gehende Diskussion schaue bitte auf Stack Overflow nach.
ES6 benutzerdefinierte Error Klasse
Babel und andere Transpiler werden den folgenden Quelltext nicht ohne zusätzliche Konfigurationen verarbeiten können.
Einige Browser enthalten den CustomError Konstruktor im Stack Trace, wenn ES2015 Klassen eingesetzt werden
class CustomError extends Error {
constructor(foo = 'bar', ...params) {
// Übergibt die verbleibenden Parameter (einschließlich Vendor spezifischer Parameter) dem Error Konstruktor
super(...params);
// Behält den richtigen Stack-Trace für die Stelle bei, an der unser Fehler ausgelöst wurde (nur bei V8 verfügbar)
if (Error.captureStackTrace) {
Error.captureStackTrace(this, CustomError);
}
// Benutzerdefinierte Debugging Informationen
this.foo = foo;
this.date = new Date();
}
}
try {
throw new CustomError('buz', 'buzMessage');
} catch(e){
console.log(e.foo); // baz
console.log(e.message); // bazMessage
console.log(e.stack); // stacktrace
}
ES5 benutzerdefiniertes Error Objekt
Alle Browser enthalten den CustomError Konstruktor im Stack Trace, wenn eine Prototypische Deklaration verwendet wird.
function CustomError(foo, message, fileName, lineNumber) {
var instance = new Error(message, fileName, lineNumber);
instance.foo = foo;
Object.setPropertyOf(instance, Object.getPrototypeOf(this));
if(Error.captureStackTrace) {
Error.captureStackTrace(instance, CustomError);
}
return instance;
}
CustomError.prototype = Object.create(Error.prototype, {
constructor: {
value: Error,
enumerable: false,
writable: true,
configurable: true
}
});
if(typeof Object.setPropertyOf != 'undefined') {
Object.setPrototypeOf(CustomError, Error);
} else {
CustomError.__proto__ = Error;
}
try {
throw new CustomError('baz', 'bazMessage');
} catch (e) {
console.log(e.foo); // 'baz'
console.log(e.message); // 'bazMessage'
}
Spezifikationen
| Spezifikation | Status | Kommentar |
|---|---|---|
| ECMAScript 1st Edition (ECMA-262) | Standard | Initiale Definition. Implementiert in JavaScript 1.1. |
| ECMAScript 5.1 (ECMA-262) Die Definition von 'Error' in dieser Spezifikation. |
Standard | |
| ECMAScript 2015 (6th Edition, ECMA-262) Die Definition von 'Error' in dieser Spezifikation. |
Standard | |
| ECMAScript (ECMA-262) Die Definition von 'Error' in dieser Spezifikation. |
Lebender Standard |
Browserkompatibilität
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Error | Chrome Vollständige Unterstützung 1 | Edge Vollständige Unterstützung 12 | Firefox Vollständige Unterstützung 1 | IE Vollständige Unterstützung 6 | Opera Vollständige Unterstützung 4 | Safari Vollständige Unterstützung 1 | WebView Android Vollständige Unterstützung 1 | Chrome Android Vollständige Unterstützung 18 | Firefox Android Vollständige Unterstützung 4 | Opera Android Vollständige Unterstützung 10.1 | Safari iOS Vollständige Unterstützung 1 | Samsung Internet Android Vollständige Unterstützung 1.0 | nodejs Vollständige Unterstützung 0.1.100 |
Error() constructor | Chrome Vollständige Unterstützung 1 | Edge Vollständige Unterstützung 12 | Firefox Vollständige Unterstützung 1 | IE Vollständige Unterstützung 6 | Opera Vollständige Unterstützung 4 | Safari Vollständige Unterstützung 1 | WebView Android Vollständige Unterstützung 1 | Chrome Android Vollständige Unterstützung 18 | Firefox Android Vollständige Unterstützung 4 | Opera Android Vollständige Unterstützung 10.1 | Safari iOS Vollständige Unterstützung 1 | Samsung Internet Android Vollständige Unterstützung 1.0 | nodejs Vollständige Unterstützung 0.1.100 |
columnNumber | Chrome Keine Unterstützung Nein | Edge Keine Unterstützung Nein | Firefox Vollständige Unterstützung 1 | IE Keine Unterstützung Nein | Opera Keine Unterstützung Nein | Safari Keine Unterstützung Nein | WebView Android Keine Unterstützung Nein | Chrome Android Keine Unterstützung Nein | Firefox Android Vollständige Unterstützung 4 | Opera Android Keine Unterstützung Nein | Safari iOS Keine Unterstützung Nein | Samsung Internet Android Keine Unterstützung Nein | nodejs Keine Unterstützung Nein |
fileName | Chrome Keine Unterstützung Nein | Edge Keine Unterstützung Nein | Firefox Vollständige Unterstützung 1 | IE Keine Unterstützung Nein | Opera Keine Unterstützung Nein | Safari Keine Unterstützung Nein | WebView Android Keine Unterstützung Nein | Chrome Android Keine Unterstützung Nein | Firefox Android Vollständige Unterstützung 4 | Opera Android Keine Unterstützung Nein | Safari iOS Keine Unterstützung Nein | Samsung Internet Android Keine Unterstützung Nein | nodejs Keine Unterstützung Nein |
lineNumber | Chrome Keine Unterstützung Nein | Edge Keine Unterstützung Nein | Firefox Vollständige Unterstützung 1 | IE Keine Unterstützung Nein | Opera Keine Unterstützung Nein | Safari Keine Unterstützung Nein | WebView Android Keine Unterstützung Nein | Chrome Android Keine Unterstützung Nein | Firefox Android Vollständige Unterstützung 4 | Opera Android Keine Unterstützung Nein | Safari iOS Keine Unterstützung Nein | Samsung Internet Android Keine Unterstützung Nein | nodejs Keine Unterstützung Nein |
message | Chrome Vollständige Unterstützung 1 | Edge Vollständige Unterstützung 12 | Firefox Vollständige Unterstützung 1 | IE Vollständige Unterstützung 6 | Opera Vollständige Unterstützung 5 | Safari Vollständige Unterstützung 1 | WebView Android Vollständige Unterstützung 1 | Chrome Android Vollständige Unterstützung 18 | Firefox Android Vollständige Unterstützung 4 | Opera Android Vollständige Unterstützung 10.1 | Safari iOS Vollständige Unterstützung 1 | Samsung Internet Android Vollständige Unterstützung 1.0 | nodejs Vollständige Unterstützung 0.1.100 |
name | Chrome Vollständige Unterstützung 1 | Edge Vollständige Unterstützung 12 | Firefox Vollständige Unterstützung 1 | IE Vollständige Unterstützung 6 | Opera Vollständige Unterstützung 4 | Safari Vollständige Unterstützung 1 | WebView Android Vollständige Unterstützung 1 | Chrome Android Vollständige Unterstützung 18 | Firefox Android Vollständige Unterstützung 4 | Opera Android Vollständige Unterstützung 10.1 | Safari iOS Vollständige Unterstützung 1 | Samsung Internet Android Vollständige Unterstützung 1.0 | nodejs Vollständige Unterstützung 0.1.100 |
stack | Chrome Vollständige Unterstützung 3 | Edge Vollständige Unterstützung 12 | Firefox Vollständige Unterstützung 1 | IE Vollständige Unterstützung 10 | Opera Vollständige Unterstützung 10.5 | Safari Vollständige Unterstützung 6 | WebView Android Vollständige Unterstützung ≤37 | Chrome Android Vollständige Unterstützung 18 | Firefox Android Vollständige Unterstützung 4 | Opera Android Vollständige Unterstützung 11 | Safari iOS Vollständige Unterstützung 6 | Samsung Internet Android Vollständige Unterstützung 1.0 | nodejs Vollständige Unterstützung 0.1.100 |
toSource | Chrome Keine Unterstützung Nein | Edge Keine Unterstützung Nein | Firefox
Keine Unterstützung
1 — 74
| IE Keine Unterstützung Nein | Opera Keine Unterstützung Nein | Safari Keine Unterstützung Nein | WebView Android Keine Unterstützung Nein | Chrome Android Keine Unterstützung Nein | Firefox Android Vollständige Unterstützung 4 | Opera Android Keine Unterstützung Nein | Safari iOS Keine Unterstützung Nein | Samsung Internet Android Keine Unterstützung Nein | nodejs Keine Unterstützung Nein |
toString | Chrome Vollständige Unterstützung 1 | Edge Vollständige Unterstützung 12 | Firefox Vollständige Unterstützung 1 | IE Vollständige Unterstützung 6 | Opera Vollständige Unterstützung 4 | Safari Vollständige Unterstützung 1 | WebView Android Vollständige Unterstützung 1 | Chrome Android Vollständige Unterstützung 18 | Firefox Android Vollständige Unterstützung 4 | Opera Android Vollständige Unterstützung 10.1 | Safari iOS Vollständige Unterstützung 1 | Samsung Internet Android Vollständige Unterstützung 1.0 | nodejs Vollständige Unterstützung 0.1.100 |
Legende
- Vollständige Unterstützung
- Vollständige Unterstützung
- Keine Unterstützung
- Keine Unterstützung
- Nicht standardisiert. Erwarte schlechte browserübergreifende Unterstützung.
- Nicht standardisiert. Erwarte schlechte browserübergreifende Unterstützung.
- Siehe Implementierungshinweise.
- Siehe Implementierungshinweise.