uses Javascript UTF-16 (source) Strings zu verwalten.
In UTF-16 gibt es 1.112.064 mögliche Zeichen. Nun wird jedes Zeichen code points dargestellt (*). In UTF-16 verwendet ein Codepunkt zwei Bytes (16 Bits), die gespeichert werden sollen. Dies bedeutet, dass Sie mit einem Codepunkt nur 65536 verschiedene Zeichen haben können.
Dies bedeutet, dass einige Zeichen mit zwei Codepunkten dargestellt werden müssen.
String.length() gibt die Anzahl der Codeeinheiten in der Zeichenfolge zurück, nicht die Anzahl der Zeichen.
MDN erklärt ganz gut, die Sache auf der Seite über String.length()
Diese Eigenschaft gibt die Anzahl der Codeeinheiten in der Zeichenkette. UTF-16, das von JavaScript verwendete Zeichenfolgenformat, verwendet eine einzelne 16-Bit-Codeeinheit, um die gebräuchlichsten Zeichen darzustellen. Für weniger häufig verwendete Zeichen müssen jedoch zwei Codeeinheiten verwendet werden stimmt nicht mit der tatsächlichen Anzahl der Zeichen in der Zeichenfolge überein.
(*): Eigentlich einige Zeichen im Bereich 010000 - 03FFFF und 040000 - 10FFFF kann bis zu 4 Bytes (32 Bits) pro Codepunkt verwenden, aber dies die Antwort nicht ändert : Einige Zeichen benötigen mehr als 2 Bytes, um dargestellt zu werden, also benötigen sie mehr als 1 Codepunkt.
Dies bedeutet, dass einige Zeichen, die mehr als 16 Bits benötigen, trotzdem eine Länge von 1 haben. Wie 0x03FFFF, braucht es 21 Bit, aber es nutzt nur eine Codeeinheit in UTF-16, so dass ihr String.length ist 1.
console.log(String.fromCharCode(0x03FFFF).length)
Siehe http: // Entwickler .teradata.com/blog/jasonstrimpel/2011/11/Javascript-String-Längen-und-Internationalisierung-Web-Anwendungen. – str