Start · Sprachen · JavaScript · Referenz · Zeichencodes: \\n, \\u{...}

Zeichencodes: \\n, \\u{...}

Keyword

Zeichencodes (Escape-Sequenzen) beginnen mit <code>\</code> und stehen für Zeichen, die sich im Quelltext nicht direkt oder nur umständlich schreiben lassen, etwa Zeilenumbrüche oder Unicode-Zeichen.

seit JavaScript ES1 (Grundformen), ES2015 (\u{…}), ES2018 (ungülti Kategorie: syntax

Signatur

"\n" "\t" "\xHH" "\uHHHH" "\u{H…HHHHHH}"

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:

  • \n Zeilenumbruch (LF, U+000A), \r Wagenrücklauf (CR), \t Tabulator, \v vertikaler Tabulator, \f Seitenvorschub, \b Rückschritt (Backspace), \0 Nullzeichen (U+0000, darf nicht vor einer Ziffer stehen)
  • \', \", \`, \\ für das jeweilige Zeichen selbst, \$ in Template-Literalen
  • \xHH Zeichen mit genau zwei Hexziffern (U+0000–U+00FF)
  • \uHHHH UTF-16-Codeeinheit mit genau vier Hexziffern
  • \u{H…} (ES2015) Unicode-Codepunkt mit 1–6 Hexziffern bis 10FFFF, 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

Typ
string
Beschreibung
Keinen Rückgabewert im eigentlichen Sinn: Beim Parsen wird die Sequenz durch das Zeichen (bzw. die UTF-16-Codeeinheiten) ersetzt, für das sie steht.

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);
Name: Anna Stadt: Berlin Er sagte: 'Hallo' und ging. C:\Benutzer\anna

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));
A é é true true 2 1 1f600

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 🎉"));
false true false true

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);
Dies ist ein langer Text ohne Umbruch. Zeile1\nZeile2 9

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
SyntaxError true