String.prototype.codePointAt()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.
Die codePointAt()
-Methode von String
-Werten gibt eine nicht-negative Ganzzahl zurück, die den Unicode-Codepunkt-Wert des Zeichens darstellt, das an dem angegebenen Index beginnt. Beachten Sie, dass der Index immer noch auf UTF-16-Codeeinheiten basiert und nicht auf Unicode-Codepunkten.
Probieren Sie es aus
Syntax
codePointAt(index)
Parameter
index
-
Nullbasierter Index des zurückzugebenden Zeichens. In eine Ganzzahl konvertiert —
undefined
wird zu 0 konvertiert.
Rückgabewert
Eine nicht-negative Ganzzahl, die den Codepunkt-Wert des Zeichens an dem angegebenen index
darstellt.
- Wenn
index
außerhalb des Bereichs von0
–str.length - 1
liegt, gibtcodePointAt()
undefined
zurück. - Wenn das Element an
index
ein führendes Surrogat von UTF-16 ist, wird der Codepunkt des Surrogat-Paars zurückgegeben. - Wenn das Element an
index
ein nachfolgendes Surrogat von UTF-16 ist, wird nur die nachfolgende Surrogat-Codeeinheit zurückgegeben.
Beschreibung
Zeichen in einem String werden von links nach rechts indiziert. Der Index des ersten Zeichens ist 0
und der Index des letzten Zeichens in einem String namens str
ist str.length - 1
.
Unicode-Codepunkte reichen von 0
bis 1114111
(0x10FFFF
). In UTF-16 ist jeder String-Index eine Codeeinheit mit einem Wert von 0
– 65535
. Höhere Codepunkte werden durch ein Paar von 16-Bit-Surrogat-Pseudo-Zeichen dargestellt. Daher gibt codePointAt()
einen Codepunkt zurück, der sich über zwei String-Indizes erstrecken kann. Für Informationen zu Unicode siehe UTF-16-Zeichen, Unicode-Codepunkte und Graphemcluster.
Beispiele
Verwendung von codePointAt()
"ABC".codePointAt(0); // 65
"ABC".codePointAt(0).toString(16); // 41
"😍".codePointAt(0); // 128525
"\ud83d\ude0d".codePointAt(0); // 128525
"\ud83d\ude0d".codePointAt(0).toString(16); // 1f60d
"😍".codePointAt(1); // 56845
"\ud83d\ude0d".codePointAt(1); // 56845
"\ud83d\ude0d".codePointAt(1).toString(16); // de0d
"ABC".codePointAt(42); // undefined
Schleifen mit codePointAt()
Da bei der Verwendung von String-Indizes in Schleifen derselbe Codepunkt zweimal besucht wird (einmal für das führende Surrogat, einmal für das nachfolgende Surrogat), und codePointAt()
beim zweiten Mal nur das nachfolgende Surrogat zurückgibt, ist es besser, Schleifen nach Index zu vermeiden.
const str = "\ud83d\udc0e\ud83d\udc71\u2764";
for (let i = 0; i < str.length; i++) {
console.log(str.codePointAt(i).toString(16));
}
// '1f40e', 'dc0e', '1f471', 'dc71', '2764'
Stattdessen verwenden Sie eine for...of
-Anweisung oder streuen Sie den String, beide rufen den [Symbol.iterator]()
des Strings auf, der nach Codepunkten iteriert. Dann verwenden Sie codePointAt(0)
, um den Codepunkt jedes Elements zu erhalten.
for (const codePoint of str) {
console.log(codePoint.codePointAt(0).toString(16));
}
// '1f40e', '1f471', '2764'
[...str].map((cp) => cp.codePointAt(0).toString(16));
// ['1f40e', '1f471', '2764']
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-string.prototype.codepointat |
Browser-Kompatibilität
BCD tables only load in the browser