Signatur
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);
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;
}
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);
}
// Wichtig · Fallstricke
- Syntaxfehler im eigenen Skript lassen sich nicht abfangen: Ist die Datei selbst ungültig, schlägt schon das Parsen fehl – ein
try...catchin derselben Datei wird nie ausgeführt. Abfangbar sind nur Fehler aus Code, der zur Laufzeit geparst wird (eval,new Function,JSON.parse,new RegExp, dynamischesimport()). - 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 mitinstanceof SyntaxErrorodererror.name. options.causewird 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
fileNameundlineNumbergibt es nur in Firefox – nicht verwenden. stackist nicht standardisiert und kann je nach Umgebung unterschiedlich aussehen.