Error

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 fileName Eigenschaft eines erstellten Error Objekts. Der Standardwert ist der Name der Datei, in dem der Quelltext Error() aufgerufen wird.
lineNumber
Optional. Der Wert fĂŒr die lineNumber Eigenschaft eines erstellten Error Objekts. Der Standardwert ist die Zeilennummer, in dem der Quelltext Error() 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() oder decodeURI() nicht valide Parameter ĂŒbergeben bekommt.

Eigenschaften

Error.prototype
Erlaubt es die Eigenschaften aller Error Instanzen 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 Error Objektes beinhaltet. Man kann diesen einsetzen, um ein neues Objekt zu erstellen. Überschreibt die Object.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

BrowserkompatibilitÀt

BCD tables only load in the browser

Siehe auch