Start · Sprachen · JavaScript · Referenz · new SyntaxError()

new SyntaxError()

Methode

Der <code>SyntaxError()</code>-Konstruktor erzeugt ein neues <code>SyntaxError</code>-Objekt, das auf syntaktisch ungültigen Code oder ungültige Eingabedaten hinweist.

seit JavaScript ES1 (options.cause: ES2022) Kategorie: method-property

Signatur

new SyntaxError(message, options)

Beschreibung

Mit new SyntaxError() erzeugen Sie ein Fehlerobjekt, das von Error erbt und ausdrückt, dass etwas syntaktisch ungültig ist. Die JavaScript-Engine selbst wirft einen SyntaxError zum Beispiel beim Parsen von ungültigem Code in eval() oder new Function(), bei ungültigem JSON in JSON.parse() oder bei fehlerhaften regulären Ausdrücken in new RegExp().

Selbst erzeugen sollten Sie einen SyntaxError, wenn Sie eigene Parser, Tokenizer oder Formatprüfungen (etwa für Konfigurationsdateien, Formeln oder DSLs) schreiben und damit signalisieren wollen, dass eine Eingabe nicht der erwarteten Grammatik entspricht. Für einen fachlich falschen Wert ist dagegen TypeError oder RangeError meist passender.

Der Konstruktor kann auch ohne new aufgerufen werden – SyntaxError("…") liefert dasselbe Ergebnis. Seit ES2022 lässt sich über options.cause ein ursprünglicher Fehler anhängen, um Fehlerketten nachvollziehbar zu machen.

Parameter

Name Typ Default Beschreibung
$message string "" Menschenlesbare Fehlerbeschreibung. Wird in error.message gespeichert; Nicht-Strings werden in einen String umgewandelt.
$options Object Optionales Objekt. Die Eigenschaft cause gibt die eigentliche Fehlerursache an und wird als error.cause abgelegt (ES2022).

Beispiele

SyntaxError erzeugen und untersuchen

const err = new SyntaxError('Unerwartetes Token "}"');

console.log(err instanceof SyntaxError); // true
console.log(err instanceof Error);       // true
console.log(err.name);                   // SyntaxError
console.log(err.message);
true true SyntaxError Unerwartetes Token "}"

Eigener Mini-Parser für Schlüssel=Wert-Zeilen

const parseConfig = (text) => {
  const result = {};
  text.split('\n').forEach((line, i) => {
    if (!line.trim() || line.startsWith('#')) return;
    const match = line.match(/^\s*([\w.]+)\s*=\s*(.*)$/);
    if (!match) {
      throw new SyntaxError(`Zeile ${i + 1}: erwartet "schluessel = wert", gefunden "${line}"`);
    }
    result[match[1]] = match[2];
  });
  return result;
};

try {
  parseConfig('host = localhost\nport 8080');
} catch (e) {
  if (e instanceof SyntaxError) console.error(e.message);
  else throw e;
}
Zeile 2: erwartet "schluessel = wert", gefunden "port 8080"

JSON-Fehler mit Ursache weiterreichen (cause)

const loadSettings = (raw) => {
  try {
    return JSON.parse(raw);
  } catch (original) {
    throw new SyntaxError('Einstellungen sind kein gültiges JSON', { cause: original });
  }
};

try {
  loadSettings('{ theme: "dark" }');
} catch (e) {
  console.log(e.message);
  console.log(e.cause instanceof SyntaxError);
}
Einstellungen sind kein gültiges JSON true

// Wichtig · Fallstricke

  • Syntaxfehler im eigenen Skript lassen sich nicht abfangen: Ist die Datei selbst ungültig, schlägt schon das Parsen fehl – ein try...catch in derselben Datei wird nie ausgeführt. Abfangbar sind nur Fehler aus Code, der zur Laufzeit geparst wird (eval, new Function, JSON.parse, new RegExp, dynamisches import()).
  • Die Meldungstexte der Engine (z. B. Unexpected token) unterscheiden sich zwischen V8, SpiderMonkey und JavaScriptCore – prüfen Sie im Code nie auf den genauen Text, sondern mit instanceof SyntaxError oder error.name.
  • options.cause wird erst ab ES2022 unterstützt (Chrome 93+, Firefox 91+, Safari 15+, Node.js 16.9+); ältere Umgebungen ignorieren das zweite Argument einfach.
  • Die nicht standardisierten Parameter fileName und lineNumber gibt es nur in Firefox – nicht verwenden.
  • stack ist nicht standardisiert und kann je nach Umgebung unterschiedlich aussehen.