Start · Sprachen · JavaScript · Referenz · ReferenceError

ReferenceError

Klasse

Repräsentiert einen Laufzeitfehler, der auftritt, wenn auf eine Variable zugegriffen wird, die im aktuellen Gültigkeitsbereich nicht existiert oder noch nicht initialisiert wurde.

seit JavaScript ES1 Kategorie: core

Signatur

class ReferenceError extends Error

Beschreibung

ReferenceError ist eine eingebaute Fehlerklasse in JavaScript, die automatisch von der JavaScript-Engine geworfen wird, wenn Code auf einen Bezeichner (Variable, Funktion, Konstante) zugreift, der im aktuellen Gültigkeitsbereich nicht deklariert wurde. Typische Ursachen sind Tippfehler in Variablennamen, das Verwenden von Variablen vor ihrer Deklaration (sog. Temporal Dead Zone bei let und const) oder das Zugreifen auf globale Variablen, die in einem anderen Kontext existieren.

ReferenceError erbt von Error und bringt die üblichen Eigenschaften name, message und stack mit. Man kann eigene ReferenceError-Instanzen mit new ReferenceError(message) erzeugen und mit throw werfen, wenn man in eigenen Bibliotheken oder APIs klar kommunizieren möchte, dass ein unbekannter Bezeichner übergeben wurde.

Besonders wichtig ist der Unterschied zur Temporal Dead Zone: Variablen, die mit let oder const deklariert werden, existieren zwar im Gültigkeitsbereich, können aber vor ihrer Deklarationszeile nicht gelesen werden – auch das führt zu einem ReferenceError. Im Gegensatz dazu werden mit var deklarierte Variablen ge-hoisted und liefern stattdessen undefined.

  • Zugriff auf nicht deklarierte Variablen → ReferenceError
  • Zugriff auf let/const vor Deklaration → ReferenceError (Temporal Dead Zone)
  • Zugriff auf var vor Deklaration → undefined (kein Fehler)

Parameter

Name Typ Default Beschreibung
$message string "" Optionale, menschenlesbare Fehlerbeschreibung, die in error.message gespeichert wird.
$options object Optionales Optionsobjekt. Kann die Eigenschaft cause enthalten, um den ursprünglichen Fehler als Ursache zu hinterlegen (z. B. { cause: originalError }). Seit ES2022.

Rückgabewert

Typ
ReferenceError
Beschreibung
Gibt eine neue ReferenceError-Instanz zurück. Die Eigenschaft name ist dabei automatisch auf "ReferenceError" gesetzt.

Beispiele

Automatisch geworfener ReferenceError

try {
  console.log(nichtDeklariertVariable);
} catch (err) {
  console.log(err instanceof ReferenceError); // true
  console.log(err.name);                      // "ReferenceError"
  console.log(err.message);                   // "nichtDeklariertVariable is not defined"
}
true ReferenceError nichtDeklariertVariable is not defined

Temporal Dead Zone bei let/const

try {
  console.log(wert); // Zugriff VOR der Deklaration
  const wert = 42;
} catch (err) {
  console.log(err instanceof ReferenceError); // true
  console.log(err.message); // "Cannot access 'wert' before initialization"
}
true Cannot access 'wert' before initialization

Eigenen ReferenceError werfen und cause nutzen

function getConfig(key, config) {
  if (!(key in config)) {
    throw new ReferenceError(
      `Konfigurationsschlüssel "${key}" ist nicht definiert.`,
      { cause: new Error(`Verfügbare Schlüssel: ${Object.keys(config).join(", ")}`) }
    );
  }
  return config[key];
}

try {
  const config = { host: "localhost", port: 3000 };
  getConfig("timeout", config);
} catch (err) {
  console.log(err.message);
  console.log(err.cause?.message);
}
Konfigurationsschlüssel "timeout" ist nicht definiert. Verfügbare Schlüssel: host, port

// Wichtig · Fallstricke

Temporal Dead Zone (TDZ): Der Bereich zwischen dem Anfang eines Blocks und der eigentlichen Deklaration von let/const heißt Temporal Dead Zone. Jeder Lesezugriff auf die Variable in dieser Zone führt zu einem ReferenceError, obwohl die Variable technisch im Scope existiert. Das ist ein häufiger Stolperstein beim Refactoring von var-Code auf let/const.

Strict Mode: Im Strict Mode ('use strict') löst das Zuweisen an eine nicht deklarierte Variable ebenfalls einen ReferenceError aus. Im Nicht-Strict-Mode würde dieselbe Zuweisung stillschweigend eine globale Variable erzeugen.

Browser-Kompatibilität: ReferenceError sowie die cause-Option sind in allen modernen Browsern und Node.js unterstützt. cause erfordert mindestens Node.js 16.9+ bzw. aktuelle Browser-Versionen (Baseline 2022).