Signatur
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
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');
}
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);
}
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);
}
// Wichtig · Fallstricke
- Nicht standardisiert:
InternalErrorgibt es nur in Firefox (SpiderMonkey). In Chrome, Edge, Safari und Node.js ist der BezeichnerInternalErrornicht definiert. Ein Zugriff darauf löst dort einenReferenceErroraus. Prüfe deshalb immer vorher mittypeof 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
fileNameundlineNumbersowie die gleichnamigen Eigenschaften sind ebenfalls Firefox-spezifisch. - Für eigene Fehlerklassen nimmst du besser
class MeinFehler extends ErrorstattInternalError, sonst funktioniert der Code nur in Firefox. - Ein
InternalErrorwegen zu tiefer Rekursion weist meist auf eine fehlende Abbruchbedingung hin. Die Ursache beheben, statt den Fehler nur abzufangen.