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-Codepunktwert des Zeichens, das am angegebenen Index beginnt, darstellt. Beachten Sie, dass der Index immer noch auf UTF-16-Code-Einheiten basiert und nicht auf Unicode-Code-Punkten.
Probieren Sie es aus
const icons = "☃★♲";
console.log(icons.codePointAt(1));
// Expected output: "9733"
Syntax
codePointAt(index)
Parameter
index
-
Nullbasierter Index des zurückzugebenden Zeichens. Konvertiert zu einer Ganzzahl —
undefined
wird in 0 konvertiert.
Rückgabewert
Eine nicht-negative Ganzzahl, die den Codepunktwert des Zeichens am angegebenen index
darstellt.
- Wenn
index
außerhalb des Bereichs von0
–str.length - 1
liegt, gibtcodePointAt()
undefined
zurück. - Wenn das Element bei
index
ein UTF-16-Leadsurrogat ist, wird der Codepunkt des Surrogat-Paars zurückgegeben. - Wenn das Element bei
index
ein UTF-16-Trailing-Surrogat ist, wird nur die Trailing-Surrogat-Code-Einheit zurückgegeben.
Beschreibung
Zeichen in einem String sind 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 Code-Einheit mit dem Wert 0
– 65535
. Höhere Codepunkte werden durch ein Paar von 16-Bit-Surrogat-Pseudo-Zeichen dargestellt. Daher gibt codePointAt()
einen Codepunkt zurück, der möglicherweise zwei String-Indizes umfasst. Für Informationen zu Unicode, siehe UTF-16-Zeichen, Unicode-Codepunkte und Graphem-Cluster.
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 das Verwenden von String-Indizes beim Schleifen dazu führt, dass derselbe Codepunkt zweimal besucht wird (einmal für das Leadsurrogat, einmal für das Trailing-Surrogat), und codePointAt()
beim zweiten Mal nur das Trailing-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 sollten Sie eine for...of
Anweisung oder Breiten Sie den String aus verwenden, die beide den String-Iterator [Symbol.iterator]()
aufrufen, 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® 2025 Language Specification # sec-string.prototype.codepointat |
Browser-Kompatibilität
BCD tables only load in the browser