Start · Sprachen · JavaScript · Referenz · new InternalError()

new InternalError()

Methode

Der Konstruktor <code>InternalError()</code> erzeugt ein Fehlerobjekt für interne Fehler der JavaScript-Engine, z. B. bei zu tiefer Rekursion. Nur in Firefox verfügbar.

seit JavaScript Nicht standardisiert: nur Firefox (SpiderMonkey) Kategorie: method-property

Signatur

new InternalError(message, options)

Beschreibung

Der Konstruktor InternalError() erzeugt ein InternalError-Objekt. Die Engine SpiderMonkey (Firefox) wirft diesen Fehlertyp selbst, wenn intern etwas schiefgeht. Das bekannteste Beispiel ist „too much recursion“, also eine zu tiefe Rekursion. Weitere Auslöser sind zu große Switch-Anweisungen, zu viele Klammern in regulären Ausdrücken oder sehr große Array-Initialisierer.

InternalError erbt von Error und verhält sich wie die übrigen Fehlertypen: Das Objekt hat die Eigenschaften message, name ("InternalError") und stack und optional cause. Du kannst den Konstruktor mit oder ohne new aufrufen, das Ergebnis ist in beiden Fällen gleich.

In der Praxis rufst du den Konstruktor so gut wie nie selbst auf. Wichtiger ist, einen von der Engine geworfenen InternalError im catch-Block zu erkennen. Weil der Fehlertyp nicht standardisiert ist, gehört er nicht in Produktionscode, der in allen Browsern laufen soll. Eigene Fehler bildest du besser mit Error oder einer eigenen Unterklasse ab.

Parameter

Name Typ Default Beschreibung
$message string "" Optionale, für Menschen lesbare Fehlerbeschreibung. Sie landet in der Eigenschaft message.
$options { cause?: any } Optionales Objekt. Die Eigenschaft cause gibt die ursprüngliche Fehlerursache an (Fehlerverkettung).
$fileName string Nur in Firefox, nicht standardisiert: Dateiname, der als Eigenschaft fileName gespeichert wird.
$lineNumber number Nur in Firefox, nicht standardisiert: Zeilennummer, die als Eigenschaft lineNumber gespeichert wird.

Rückgabewert

Typ
InternalError
Beschreibung
Ein neues InternalError-Objekt, das von Error erbt.

Beispiele

InternalError erzeugen (mit Absicherung, falls nicht verfügbar)

if (typeof InternalError === 'function') {
  const err = new InternalError('Engine-Limit überschritten');
  console.log(err.name);
  console.log(err.message);
  console.log(err instanceof Error);
} else {
  console.log('InternalError wird in dieser Umgebung nicht unterstützt');
}
// Firefox: InternalError Engine-Limit überschritten true // Chrome/Node.js/Safari: InternalError wird in dieser Umgebung nicht unterstützt

Fehler bei zu tiefer Rekursion browserübergreifend erkennen

const endlos = (n) => endlos(n + 1);

try {
  endlos(0);
} catch (err) {
  // Firefox wirft InternalError, V8/JavaScriptCore werfen RangeError
  const istStackUeberlauf =
    err instanceof RangeError ||
    (typeof InternalError === 'function' && err instanceof InternalError);
  console.log(err.name, '→ Stack-Überlauf:', istStackUeberlauf);
}
// Firefox: InternalError → Stack-Überlauf: true // Chrome/Node.js: RangeError → Stack-Überlauf: true

Fehlerursache mit options.cause verketten

if (typeof InternalError === 'function') {
  const ursache = new TypeError('Ungültiger Zustand');
  const err = new InternalError('Verarbeitung abgebrochen', { cause: ursache });
  console.log(err.message);
  console.log(err.cause.message);
}
// Firefox: Verarbeitung abgebrochen Ungültiger Zustand

// Wichtig · Fallstricke

  • Nicht standardisiert: InternalError gibt es nur in Firefox (SpiderMonkey). In Chrome, Edge, Safari und Node.js ist der Bezeichner InternalError nicht definiert. Ein Zugriff darauf löst dort einen ReferenceError aus. Prüfe deshalb immer vorher mit typeof InternalError === 'function'.
  • Andere Engines melden vergleichbare Probleme mit anderen Fehlertypen. Eine zu tiefe Rekursion führt in V8 zum Beispiel zu RangeError: Maximum call stack size exceeded. Browserübergreifende Fehlerbehandlung sollte beide Fälle abdecken.
  • Die Parameter fileName und lineNumber sowie die gleichnamigen Eigenschaften sind ebenfalls Firefox-spezifisch.
  • Für eigene Fehlerklassen nimmst du besser class MeinFehler extends Error statt InternalError, sonst funktioniert der Code nur in Firefox.
  • Ein InternalError wegen zu tiefer Rekursion weist meist auf eine fehlende Abbruchbedingung hin. Die Ursache beheben, statt den Fehler nur abzufangen.