Start · Sprachen · JavaScript · Referenz · ErrorEvent.error

ErrorEvent.error

Eigenschaft

Nur lesbare Eigenschaft, die den mit einem <code>ErrorEvent</code> verbundenen Fehlerwert liefert – meist ein <code>Error</code>- oder <code>DOMException</code>-Objekt.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

ErrorEvent.error

Beschreibung

Die Eigenschaft ErrorEvent.error enthält den JavaScript-Wert, der beim Auslösen des Fehlers geworfen wurde. Wirft ein Skript mit throw new TypeError("…"), landet dieses Objekt in event.error, samt name, message und (nicht standardisiertem, aber überall vorhandenem) stack.

Wichtig ist das für globale Fehlerbehandlung: Mit einem error-Listener auf window (oder self in einem Worker) kann man nicht abgefangene Ausnahmen protokollieren und an einen Monitoring-Dienst schicken. Im Gegensatz zu ErrorEvent.message, das nur eine Zeichenkette ist, bekommt man über error das eigentliche Fehlerobjekt mit Stacktrace und eigenen Zusatzfeldern.

Da in JavaScript jeder Wert geworfen werden kann (throw "Text", throw 42, throw null), ist error vom Typ any. Man sollte also nicht einfach annehmen, dass es ein Error ist, sondern das vorher mit instanceof Error prüfen.

Rückgabewert

Typ
any
Beschreibung
Der geworfene Wert, meist ein Error oder eine DOMException. Kann null sein, etwa bei Skriptfehlern aus anderen Ursprüngen oder bei Events, die ohne error-Option erzeugt wurden.

Beispiele

Globaler Fehler-Handler mit Stacktrace

window.addEventListener("error", (event) => {
  const { error, message, filename, lineno, colno } = event;
  if (error instanceof Error) {
    console.log(`${error.name}: ${error.message}`);
    console.log(error.stack);
  } else {
    // Kein Error-Objekt: z. B. throw "Text" oder Cross-Origin-Fehler
    console.log("Fehler ohne Objekt:", message, filename, lineno, colno);
  }
});

setTimeout(() => {
  throw new TypeError("Benutzer nicht gefunden");
}, 0);
TypeError: Benutzer nicht gefunden TypeError: Benutzer nicht gefunden at …

Fehler an einen Monitoring-Endpunkt senden

const serialisiere = (err) =>
  err instanceof Error
    ? { name: err.name, message: err.message, stack: err.stack }
    : { value: String(err) };

window.onerror = null; // nur addEventListener verwenden
window.addEventListener("error", (event) => {
  const payload = {
    ...serialisiere(event.error),
    url: location.href,
    datei: event.filename,
    zeile: event.lineno,
    zeit: new Date().toISOString()
  };
  navigator.sendBeacon("/api/fehler", JSON.stringify(payload));
});

ErrorEvent manuell erzeugen und auslesen

const fehler = new RangeError("Wert außerhalb des Bereichs");
const event = new ErrorEvent("error", {
  message: fehler.message,
  error: fehler
});

console.log(event.error === fehler);
console.log(event.error.name);

// Ohne error-Option ist der Wert null
console.log(new ErrorEvent("error").error);
true RangeError null

Fehler aus einem Web Worker

// main.js
const worker = new Worker("worker.js");
worker.addEventListener("error", (event) => {
  // Im Hauptthread steht das Objekt meist nicht zur Verfügung
  console.log("Meldung:", event.message);
  console.log("error:", event.error);
  event.preventDefault();
});

// worker.js
// self.addEventListener("error", (e) => console.log(e.error?.stack));
// throw new Error("Absturz im Worker");
Meldung: Uncaught Error: Absturz im Worker error: null

// Wichtig · Fallstricke

  • Cross-Origin-Skripte: Kommt der Fehler aus einem Skript eines anderen Ursprungs, maskiert der Browser die Angaben: message ist dann "Script error." und error ist null. Abhilfe: das Skript mit crossorigin="anonymous" laden und vom Server den Header Access-Control-Allow-Origin senden lassen.
  • Beliebige Werte: Geworfen werden kann alles, auch Zeichenketten oder undefined. Vor dem Zugriff auf .stack deshalb mit instanceof Error oder optionaler Verkettung (event.error?.stack) absichern.
  • Abgelehnte Promises lösen kein error-Event aus, sondern unhandledrejection. Den Grund liefert dort PromiseRejectionEvent.reason.
  • Ressourcenfehler (z. B. ein <img>, das nicht lädt) erzeugen ein einfaches Event, kein ErrorEvent. event.error ist dann undefined.
  • Bei window.onerror kommt der Fehlerwert als fünftes Argument an: (message, source, lineno, colno, error), und nicht als Event-Objekt.
  • Datenschutz: Stacktraces und Fehlermeldungen können URLs, Tokens oder Benutzerdaten enthalten. Vor dem Versand an externe Dienste bereinigen.
  • Die Eigenschaft wird von allen modernen Browsern unterstützt. Sehr alte Browser (IE ≤ 10) kennen sie nicht.