Signatur
Beschreibung
EvalError ist eine eingebaute Fehlerklasse, die von Error erbt und ursprünglich dazu gedacht war, Fehler zu signalisieren, die beim unsachgemäßen Gebrauch der globalen eval()-Funktion auftreten. In modernen JavaScript-Umgebungen (ab ES5) wird EvalError von der Laufzeitumgebung selbst nicht mehr geworfen – stattdessen erzeugen eval()-Fehler gewöhnliche SyntaxError- oder TypeError-Instanzen.
EvalError ist dennoch im Standard enthalten und kann manuell instanziiert und geworfen werden, um in eigenen Bibliotheken oder APIs semantisch auf eval()-bezogene Situationen hinzuweisen. Die Klasse verhält sich wie jede andere Fehlerklasse: Sie besitzt die Eigenschaften name, message und stack.
Im modernen JavaScript-Alltag spielt EvalError eine untergeordnete Rolle. Wer Code-Qualität verbessern möchte, sollte stattdessen ganz auf eval() verzichten und sichere Alternativen wie JSON.parse(), Function() oder Template-basierte Ansätze verwenden. EvalError bleibt jedoch nützlich, wenn man eigene Abstraktion rund um dynamische Codeausführung baut und klar kommunizieren möchte, dass ein eval()-Kontext die Ursache des Fehlers ist.
- name: Immer
"EvalError" - message: Die beim Konstruktor übergebene Fehlermeldung
- stack: Stacktrace (umgebungsabhängig)
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $message | string | "" | Eine menschenlesbare Beschreibung des Fehlers, die in error.message gespeichert wird. |
| $options | object | {} | Ein optionales Objekt mit den Eigenschaften cause (ein beliebiger Wert, der als Ursache des Fehlers dient, z. B. ein anderer Error) und fileName/lineNumber (nicht standardisiert, nur in manchen Umgebungen). |
Rückgabewert
EvalError, die von Error erbt. Kann mit instanceof EvalError und instanceof Error geprüft werden.Beispiele
EvalError manuell werfen und abfangen
// EvalError wird in modernen Engines nicht automatisch geworfen,
// kann aber manuell verwendet werden.
const validateCode = (code) => {
if (code.includes('eval(')) {
throw new EvalError('Die Verwendung von eval() ist in diesem Kontext verboten.');
}
return code;
};
try {
validateCode('const result = eval("2 + 2");');
} catch (e) {
console.log(e instanceof EvalError); // true
console.log(e instanceof Error); // true
console.log(e.name); // "EvalError"
console.log(e.message); // "Die Verwendung von eval() ist in diesem Kontext verboten."
}
EvalError mit cause (ES2022)
// Mit der 'cause'-Option lässt sich der ursprüngliche Fehler als Ursache angeben.
const runDynamic = (snippet) => {
try {
// Simulierter Fehlschlag
throw new SyntaxError('Unerwartetes Token');
} catch (originalError) {
throw new EvalError(
`Dynamische Ausführung von "${snippet}" fehlgeschlagen.`,
{ cause: originalError }
);
}
};
try {
runDynamic('x === {');
} catch (e) {
console.log(e.name); // "EvalError"
console.log(e.message); // "Dynamische Ausführung von "x === {" fehlgeschlagen."
console.log(e.cause.name); // "SyntaxError"
console.log(e.cause.message); // "Unerwartetes Token"
}
// Wichtig · Fallstricke
Wird von modernen Engines nicht mehr geworfen: Seit ES5 wirft keine gängige JavaScript-Laufzeitumgebung (V8, SpiderMonkey, JavaScriptCore) mehr automatisch einen EvalError. Der Typ existiert ausschließlich aus Gründen der Abwärtskompatibilität und für den manuellen Gebrauch.
Sicherheitshinweis: eval() selbst ist aus mehreren Gründen gefährlich – es öffnet Angriffsflächen für Code-Injection (ähnlich wie innerHTML für XSS), behindert Optimierungen der JavaScript-Engine und kann im Strict Mode oder unter einer strengen Content Security Policy (CSP) mit script-src 'unsafe-eval' vollständig blockiert sein. In solchen Umgebungen löst eval() einen EvalError oder einen TypeError aus, je nach Browser.
Vererbungskette: EvalError → Error → Object. Alle Methoden von Error.prototype (z. B. toString()) stehen zur Verfügung.