Signatur
Beschreibung
Eine Escape-Sequenz beginnt mit einem umgekehrten Schrägstrich \. Sie ist in String-Literalen ('…', "…"), in Template-Literalen (`…`), in regulären Ausdrücken und teilweise auch in Bezeichnern erlaubt. So kann man Steuerzeichen wie Zeilenumbruch und Tabulator schreiben, Anführungszeichen innerhalb eines Strings verwenden oder beliebige Unicode-Zeichen über ihren Codepunkt angeben, ohne dass sie im Quelltext literal stehen müssen.
Die wichtigsten Formen:
\nZeilenumbruch (LF, U+000A),\rWagenrücklauf (CR),\tTabulator,\vvertikaler Tabulator,\fSeitenvorschub,\bRückschritt (Backspace),\0Nullzeichen (U+0000, darf nicht vor einer Ziffer stehen)\',\",\`,\\für das jeweilige Zeichen selbst,\$in Template-Literalen\xHHZeichen mit genau zwei Hexziffern (U+0000–U+00FF)\uHHHHUTF-16-Codeeinheit mit genau vier Hexziffern\u{H…}(ES2015) Unicode-Codepunkt mit 1–6 Hexziffern bis10FFFF, damit auch Zeichen außerhalb der BMP wie Emojis ohne Surrogatpaar\direkt vor einem Zeilenumbruch: Zeilenfortsetzung. Der Umbruch gehört dann nicht zum String.
Unbekannte Escape-Sequenzen wie \q ergeben in normalen Strings einfach das Zeichen selbst ("q"). In regulären Ausdrücken mit dem Flag u oder v lösen sie dagegen einen SyntaxError aus. Intern speichert JavaScript Strings in UTF-16. Ein Zeichen, das mit \u{…} oberhalb von U+FFFF angegeben wird, belegt deshalb trotzdem zwei Codeeinheiten, und length ergibt 2.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $HH | string (2 Hexziffern) | Bei \xHH: genau zwei Hexadezimalziffern (00–FF), also Latin-1-Bereich. |
|
| $HHHH | string (4 Hexziffern) | Bei \uHHHH: genau vier Hexziffern, eine UTF-16-Codeeinheit. Zeichen oberhalb U+FFFF brauchen zwei solcher Sequenzen (Surrogatpaar). |
|
| $H… | string (1–6 Hexziffern) | Bei \u{…}: Unicode-Codepunkt von 0 bis 10FFFF. Führende Nullen sind erlaubt. Größere Werte führen zu einem SyntaxError. |
|
| $Zeichen | n | r | t | b | f | v | 0 | ' | " | ` | \\ | $ | Bei einfachen Escapes das Zeichen nach dem Backslash, das die Bedeutung festlegt. |
Rückgabewert
Beispiele
Steuerzeichen und Anführungszeichen
const text = "Name:\tAnna\nStadt:\tBerlin";
console.log(text);
const zitat = 'Er sagte: \'Hallo\' und ging.';
console.log(zitat);
const pfad = "C:\\Benutzer\\anna";
console.log(pfad);
Hex- und Unicode-Escapes vergleichen
console.log("\x41", "\u00E9", "\u{E9}");
console.log("\u00E9" === "é");
// Emoji außerhalb der BMP
const smiley = "\u{1F600}";
console.log(smiley === "\uD83D\uDE00"); // gleiches Surrogatpaar
console.log(smiley.length); // UTF-16-Codeeinheiten
console.log([...smiley].length); // Codepunkte
console.log(smiley.codePointAt(0).toString(16));
Unicode-Escapes in regulären Ausdrücken (Flag u)
// Ohne u-Flag bedeutet \u{61} "61-mal den Buchstaben u"
console.log(/\u{61}/.test("a"));
console.log(/\u{61}/u.test("a"));
const hatEmoji = (s) => /[\u{1F300}-\u{1FAFF}]/u.test(s);
console.log(hatEmoji("Guten Morgen ☀️"), hatEmoji("Party 🎉"));
Zeilenfortsetzung und String.raw
const lang = "Dies ist ein langer \
Text ohne Umbruch.";
console.log(lang);
// String.raw wertet Escapes nicht aus
console.log(String.raw`Zeile1\nZeile2`);
console.log(String.raw`\u{1F600}`.length);
Oktal-Escapes im Strict Mode
"use strict";
try {
// eval nötig, da der Fehler sonst schon beim Parsen des Skripts auftritt
eval('"\\101"');
} catch (e) {
console.log(e.name);
}
console.log("\x41" === "A"); // moderne Alternative