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 an der angegebenen Indexposition darstellt. Beachten Sie, dass der Index weiterhin auf UTF-16 Code-Einheiten basiert, nicht auf Unicode-Codepunkten.
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. In eine Ganzzahl umgewandelt —
undefined
wird in 0 umgewandelt.
Rückgabewert
Eine nicht-negative Ganzzahl, die den Codepunkt-Wert des Zeichens am angegebenen index
darstellt.
- Wenn
index
außerhalb des Bereichs von0
–str.length - 1
liegt, gibtcodePointAt()
undefined
zurück. - Wenn das Element an
index
ein UTF-16 führendes Surrogat ist, gibt es den Codepunkt des Surrogat-Paares zurück. - Wenn das Element an
index
ein UTF-16 nachfolgendes Surrogat ist, gibt es nur die Surrogat-Code-Einheit zurück.
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 jedes String-Index eine Code-Einheit mit einem Wert von 0
– 65535
. Höhere Codepunkte werden durch ein Paar von 16-Bit-Surrogat-Pseudozahlen dargestellt. Daher gibt codePointAt()
einen Codepunkt zurück, der sich über zwei String-Indizes erstrecken kann. Weitere Informationen zu Unicode finden Sie unter 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 die Verwendung von String-Indizes für Schleifen dazu führt, dass derselbe Codepunkt zweimal besucht wird (einmal für das führende Surrogat, einmal für das nachfolgende Surrogat), und das zweite Mal codePointAt()
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'
Verwenden Sie stattdessen eine for...of
Schleife oder spreaden Sie den String, die beide den [Symbol.iterator]()
des Strings aufrufen, welcher nach Codepunkten iteriert. Verwenden Sie dann 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® 2026 Language Specification # sec-string.prototype.codepointat |