String.prototype.codePointAt()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2015 browserübergreifend verfügbar.
Die Methode codePointAt() von String-Werten gibt eine nicht negative Ganzzahl zurück, die dem Unicode-Codepunkt des Zeichens entspricht, das am angegebenen Index beginnt. Beachten Sie, dass der Index weiterhin auf UTF-16-Codeeinheiten 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. Er wird in eine Ganzzahl umgewandelt —
undefinedwird in 0 umgewandelt.
Rückgabewert
Eine nicht negative Ganzzahl, die den Codepunktwert des Zeichens am angegebenen index darstellt.
- Liegt
indexaußerhalb des Bereichs von0bisstr.length - 1, gibtcodePointAt()undefinedzurück. - Ist das Element an
indexein führendes UTF-16-Surrogat, wird der Codepunkt des Surrogat_paares_ zurückgegeben. - Ist das Element an
indexein nachfolgendes UTF-16-Surrogat, wird nur die nachfolgende Surrogat-Codeeinheit zurückgegeben.
Beschreibung
Die 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 bis 65535. Höhere Codepunkte werden durch ein Paar von 16-Bit-Surrogat-Pseudozeichen 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 Graphemcluster.
Beispiele
>codePointAt() verwenden
"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
Mit codePointAt() iterieren
Wenn Sie mit String-Indizes iterieren, wird derselbe Codepunkt zweimal besucht (einmal beim führenden und einmal beim nachfolgenden Surrogat). Beim zweiten Mal gibt codePointAt() nur das nachfolgende Surrogat zurück. Vermeiden Sie daher nach Möglichkeit eine Iteration über Indizes.
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-Anweisung oder verteilen Sie den String mit der Spread-Syntax. Beide Möglichkeiten rufen [Symbol.iterator]() des Strings auf, wodurch über Codepunkte iteriert wird. Verwenden Sie anschließend 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
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype.codepointat> |