Start · Sprachen · JavaScript · Referenz · InternalError

InternalError

Klasse

Repräsentiert einen internen Fehler der JavaScript-Engine, z. B. bei zu tiefer Rekursion oder übermäßig großen Strukturen.

seit JavaScript Nicht standardisiert (Firefox-spezifisch) Kategorie: core

Signatur

class InternalError extends Error

Beschreibung

InternalError ist eine nicht standardisierte Fehlerklasse, die von der JavaScript-Engine geworfen wird, wenn ein internes Limit überschritten wird. Der häufigste Anwendungsfall ist eine zu tiefe Rekursion (Stack Overflow), aber auch übermäßig große Switch-Anweisungen, Array-Initialisierungen oder reguläre Ausdrücke können diesen Fehler auslösen.

Der Fehler ist ausschließlich in Firefox (SpiderMonkey-Engine) implementiert und gehört nicht zum ECMAScript-Standard. In anderen Browsern (Chrome, Safari, Edge) wird bei ähnlichen Situationen ein RangeError oder ein allgemeiner Error geworfen. Code, der explizit auf InternalError prüft, ist daher nicht portabel.

Typischerweise trifft man InternalError beim Debuggen oder in try...catch-Blöcken, wenn man zwischen verschiedenen Fehlertypen unterscheiden möchte. Man sollte ihn nicht selbst instanziieren, da er ein Zeichen für ein grundlegendes Problem im Code (z. B. fehlende Rekursionsbasis) ist, das behoben werden muss.

  • too much recursion – häufigste Ursache: fehlende oder fehlerhafte Abbruchbedingung bei Rekursion
  • too much nested array initializers – extrem tief verschachtelte Array-Literale
  • too many switch cases – Switch-Anweisung mit sehr vielen Zweigen

Parameter

Name Typ Default Beschreibung
$message string "" Optionale menschenlesbare Fehlermeldung, die den Fehler beschreibt. Wird in error.message gespeichert.
$options { cause?: any } Optionales Objekt mit einer cause-Eigenschaft, die den ursprünglichen Fehler als Ursache angibt (verfügbar über error.cause).

Rückgabewert

Typ
InternalError
Beschreibung
Eine neue Instanz von InternalError mit den Eigenschaften name, message, stack und ggf. cause.

Beispiele

Rekursionsfehler abfangen

function endlosRekursion() {
  return endlosRekursion();
}

try {
  endlosRekursion();
} catch (err) {
  // In Firefox: InternalError, in Chrome: RangeError
  console.log(err instanceof Error);        // true
  console.log(err.name);                    // "InternalError" (Firefox)
  console.log(err.message);                 // "too much recursion"
}
true "InternalError" "too much recursion"

Portabler Fehler-Check über name-Eigenschaft

function sichereRekursion(n, tiefe = 0) {
  if (tiefe > 10_000) {
    throw new RangeError('Maximale Rekursionstiefe überschritten');
  }
  if (n <= 0) return 0;
  return sichereRekursion(n - 1, tiefe + 1);
}

try {
  sichereRekursion(20_000);
} catch (err) {
  // Portabler Check, der sowohl InternalError als auch RangeError abdeckt
  if (err.name === 'InternalError' || err instanceof RangeError) {
    console.error('Rekursionstiefe überschritten:', err.message);
  } else {
    throw err; // Unbekannte Fehler weiterwerfen
  }
}
Rekursionstiefe überschritten: Maximale Rekursionstiefe überschritten

// Wichtig · Fallstricke

Nicht standardisiert: InternalError ist kein Teil des ECMAScript-Standards und wird nur von Firefox unterstützt. Produktionscode sollte nicht explizit auf instanceof InternalError prüfen, da dies in anderen Umgebungen zu einem ReferenceError führt (die Klasse existiert dort nicht). Nutze stattdessen err.name === 'InternalError' für einen sicheren, portablen Vergleich.

Das Auftreten eines InternalError ist fast immer ein Zeichen für einen Programmierfehler (z. B. fehlende Rekursionsbasis). Man sollte den Fehler beheben, anstatt ihn nur abzufangen. Instanzen dieser Klasse sollten nicht manuell erzeugt werden.