Start · Sprachen · JavaScript · Referenz · EvalError

EvalError

Klasse

Repräsentiert einen Fehler, der im Zusammenhang mit der globalen <code>eval()</code>-Funktion steht.

seit JavaScript ES3 Kategorie: core

Signatur

class EvalError extends Error

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

Typ
EvalError
Beschreibung
Eine neue Instanz von 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."
}
true true EvalError 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"
}
EvalError Dynamische Ausführung von "x === {" fehlgeschlagen. SyntaxError 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: EvalErrorErrorObject. Alle Methoden von Error.prototype (z. B. toString()) stehen zur Verfügung.