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

js
codePointAt(index)

Parameter

index

Nullbasierter Index des zurückzugebenden Zeichens. Konvertiert zu einer Ganzzahlundefined 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 von 0str.length - 1 liegt, gibt codePointAt() 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 065535. 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()

js
"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.

js
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.

js
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

Siehe auch