Start · Sprachen · JavaScript · Referenz · SyntaxError

SyntaxError

Klasse

Repräsentiert einen Fehler, der auftritt, wenn syntaktisch ungültiger JavaScript-Code interpretiert oder geparst wird.

seit JavaScript ES1 Kategorie: core

Signatur

class SyntaxError extends Error

Beschreibung

SyntaxError ist eine eingebaute Fehlerklasse, die von Error erbt und automatisch von der JavaScript-Engine geworfen wird, wenn der Parser auf ungültigen Code trifft – etwa bei fehlenden Klammern, falschen Token oder anderen Syntaxverletzungen. Typische Auslöser sind fehlerhafte JSON.parse()-Aufrufe, ungültige reguläre Ausdrücke oder manuell übergebener Code an eval().

Entwickler können SyntaxError auch manuell werfen, um in eigenen Parsern oder Validierungsfunktionen auf syntaktische Fehler in Eingaben hinzuweisen. Das Objekt besitzt neben der geerbten message- und name-Eigenschaft auch einen stack-Trace (in allen modernen Umgebungen).

  • Automatisch geworfen: beim Laden/Ausführen von Code mit Syntaxfehlern, bei JSON.parse() mit ungültigem JSON, bei new RegExp() mit ungültigem Muster.
  • Manuell werfen: throw new SyntaxError('Nachricht') in eigenen Validierungsroutinen.
  • Nicht fangbar beim Laden: Syntaxfehler auf Modulebene oder beim initialen Parsen eines Skripts können nicht mit try/catch innerhalb desselben Skripts abgefangen werden – wohl aber Fehler aus eval() oder JSON.parse().

Da SyntaxError eine normale Klasse ist, lässt er sich mit instanceof SyntaxError prüfen und kann in eigenen Fehler-Hierarchien als Basisklasse dienen.

Parameter

Name Typ Default Beschreibung
$message string "" Menschenlesbare Beschreibung des Fehlers. Wird in error.message gespeichert.
$options object Optionsobjekt (ES2022+). Kann cause enthalten ({ cause: originalError }), um die Ursachenkette zu dokumentieren.

Rückgabewert

Typ
SyntaxError
Beschreibung
Eine neue SyntaxError-Instanz mit gesetzter message, name ("SyntaxError") und optionalem cause.

Beispiele

SyntaxError bei JSON.parse() abfangen

const rohdaten = '{name: "Alice"}'; // Ungültiges JSON: Schlüssel ohne Anführungszeichen

try {
  const obj = JSON.parse(rohdaten);
  console.log(obj);
} catch (err) {
  if (err instanceof SyntaxError) {
    console.error('JSON-Syntaxfehler:', err.message);
  } else {
    throw err; // Unbekannten Fehler weiterwerfen
  }
}
JSON-Syntaxfehler: Expected property name or '}' in JSON at position 1

Eigenen SyntaxError werfen (z. B. in einem Mini-Parser)

function parseKommando(eingabe) {
  const teile = eingabe.trim().split(/\s+/);
  if (teile.length < 2) {
    throw new SyntaxError(
      `Ungültige Syntax: "${eingabe}" – erwartet wird: BEFEHL ARGUMENT`,
      { cause: new Error('Zu wenige Token') }
    );
  }
  return { befehl: teile[0], argument: teile.slice(1).join(' ') };
}

try {
  console.log(parseKommando('senden Hallo Welt')); // OK
  console.log(parseKommando('senden'));             // Fehler
} catch (err) {
  console.error(`${err.name}: ${err.message}`);
  console.error('Ursache:', err.cause?.message);
}
{ befehl: 'senden', argument: 'Hallo Welt' } SyntaxError: Ungültige Syntax: "senden" – erwartet wird: BEFEHL ARGUMENT Ursache: Zu wenige Token

SyntaxError aus eval() abfangen

const codeFragment = 'function (} {}'; // Defektes Funktions-Literal

try {
  // eslint-disable-next-line no-eval
  eval(codeFragment);
} catch (err) {
  console.log(err instanceof SyntaxError); // true
  console.log(err.name);                   // 'SyntaxError'
  console.log(err.message);
}
true SyntaxError Unexpected token '}'

// Wichtig · Fallstricke

Nicht fangbare Syntaxfehler: Syntaxfehler, die beim erstmaligen Parsen eines Skripts auftreten (also bevor eine einzige Zeile ausgeführt wird), können nicht mit try/catch innerhalb desselben Skripts abgefangen werden – das gesamte Skript wird verworfen. Nur Fehler aus dynamisch ausgeführtem Code (eval(), new Function()) oder aus Parsing-Funktionen wie JSON.parse() sind zur Laufzeit fangbar.

Sicherheitshinweis: Vermeide eval() und new Function() mit nutzerkontrollierten Eingaben – auch wenn SyntaxError fangbar ist, bleiben Code-Injection-Risiken bestehen.

Browser-Kompatibilität: SyntaxError ist seit jeher in allen Umgebungen verfügbar. Die cause-Option im Konstruktor ist ab ES2022 standardisiert (Chrome 93+, Firefox 91+, Node.js 16.9+).