Signatur
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
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"
}
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
}
}
// 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.