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 ganze Zahl zurück, die den Unicode-Codepunktwert des Zeichens repräsentiert, das an dem 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

js
codePointAt(index)

Parameter

index

Nullbasierter Index des Zeichens, das zurückgegeben werden soll. In eine ganze Zahl umgewandeltundefined wird in 0 umgewandelt.

Rückgabewert

Eine nicht-negative ganze Zahl, die den Codepunktwert des Zeichens am angegebenen index repräsentiert.

  • Wenn index außerhalb des Bereichs von 0str.length - 1 liegt, gibt codePointAt() undefined zurück.
  • Wenn das Element bei index ein UTF-16-leitender Surrogat ist, wird der Codepunkt des Surrogatpäärchens zurückgegeben.
  • Wenn das Element bei index ein UTF-16-nachlaufender Surrogat ist, wird nur die nachlaufende Surrogateinheit 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 Codeeinheit mit dem Wert 065535. Höhere Codepunkte werden durch ein Paar 16-Bit Surrogat-Pseudowörter dargestellt. Daher gibt codePointAt() einen Codepunkt zurück, der sich über zwei String-Indizes erstrecken kann. Für Informationen über 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

Schleifennutzung mit codePointAt()

Da die Verwendung von String-Indizes für Schleifen dazu führt, dass derselbe Codepunkt zweimal besucht wird (einmal für das leitende Surrogat, einmal für das nachlaufende Surrogat), und beim zweiten Mal codePointAt() nur das nachlaufende Surrogat zurückgibt, sollte vermieden werden, durch Indizes zu schleifen.

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 sollte eine for...of Anweisung verwendet werden oder der String aufgeteilt werden, beide rufen den [Symbol.iterator]() des Strings auf, der durch Codepunkte iteriert. Verwenden Sie dann 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

Siehe auch