Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 40
Zeichen, Codepoints und JavaScript-Strings
ОглавлениеJavaScript verwendet die UTF-16-Codierung des Unicode-Zeichensatzes: Zeichenketten sind Sequenzen von vorzeichenlosen 16-Bit-Werten. Die am häufigsten verwendeten Unicode-Zeichen (die der als Basic Multilingual Plane bezeichneten Ebene) haben Codepoints, die in 16 Bit passen und durch ein Element eines Strings dargestellt werden können. Unicode-Zeichen, deren Codepoints nicht in 16 Bit passen, werden nach den Regeln von UTF-16 als Sequenz (als Ersatzzeichenpaare bzw. Surrogate Pairs bezeichnet) zweier 16-Bit-Werte codiert. Es kann also sein, dass ein JavaScript-String der Länge 2 (zwei 16-Bit-Werte) nur ein einziges Unicode-Zeichen darstellt:
let euro = "€";
let love = "";
euro.length // => 1: Dieses Zeichen hat ein 16-Bit-Element.
love.length // => 2: Die UTF-16-Codierung von ist "\ud83d\udc99".
Die meisten von JavaScript definierten Methoden zur String-Manipulation arbeiten auf 16-Bit-Werten, nicht auf Zeichen. Sie behandeln Ersatzzeichenpaare nicht unterschiedlich, führen keine Normalisierung des Strings durch und sorgen nicht einmal dafür, dass eine Zeichenkette wohlgeformtes UTF-16 ist.
In ES6 sind Zeichenketten übrigens iterierbar, und wenn Sie eine for/of-Schleife oder den …-Operator auf einem String verwenden, wird über die tatsächlichen Zeichen des Strings iteriert, nicht über die 16-Bit-Werte.