Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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

js
codePointAt(index)

Parameter

index

Nullbasierter Index des zurückzugebenden Zeichens. Er wird in eine Ganzzahl umgewandelt — undefined wird in 0 umgewandelt.

Rückgabewert

Eine nicht negative Ganzzahl, die den Codepunktwert des Zeichens am angegebenen index darstellt.

  • Liegt index außerhalb des Bereichs von 0 bis str.length - 1, gibt codePointAt() undefined zurück.
  • Ist das Element an index ein führendes UTF-16-Surrogat, wird der Codepunkt des Surrogat_paares_ zurückgegeben.
  • Ist das Element an index ein 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

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

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.

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'

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.

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

Spezifikation
ECMAScript® 2027 Language Specification
# sec-string.prototype.codepointat

Browser-Kompatibilität

Siehe auch