String.prototype.charCodeAt()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Die Methode charCodeAt()
von String
-Werten gibt eine Ganzzahl zwischen 0
und 65535
zurück, die die UTF-16-Code-Einheit an dem angegebenen Index repräsentiert.
charCodeAt()
indiziert den String immer als eine Sequenz von UTF-16-Code-Einheiten, was bedeutet, dass es einzelne Surrogate zurückgeben kann. Um den vollständigen Unicode-Codepunkt am angegebenen Index zu erhalten, verwenden Sie String.prototype.codePointAt()
.
Probieren Sie es aus
Syntax
charCodeAt(index)
Parameter
index
-
Nullbasierter Index des zurückzugebenden Zeichens. In eine Ganzzahl umgewandelt —
undefined
wird in 0 umgewandelt.
Rückgabewert
Eine Ganzzahl zwischen 0
und 65535
, die den UTF-16-Code-Einheitswert des Zeichens am angegebenen index
repräsentiert. Wenn index
außerhalb des Bereichs von 0
bis str.length - 1
liegt, gibt charCodeAt()
NaN
zurück.
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 als str
bezeichneten String ist str.length - 1
.
Unicode-Codepunkte reichen von 0
bis 1114111
(0x10FFFF
). charCodeAt()
gibt immer einen Wert zurück, der kleiner als 65536
ist, da die höheren Codepunkte durch ein Paar von 16-Bit-Surrogat-Pseudo-Zeichen dargestellt werden. Daher ist es notwendig, um ein vollständiges Zeichen mit einem Wert größer als 65535
zu erhalten, nicht nur charCodeAt(i)
, sondern auch charCodeAt(i + 1)
abzurufen (als ob man einen String mit zwei Zeichen manipuliert), oder stattdessen codePointAt(i)
zu verwenden. Weitere Informationen zu Unicode finden Sie unter UTF-16-Zeichen, Unicode-Codepunkte und Graphem-Cluster.
Beispiele
Verwendung von charCodeAt()
Das folgende Beispiel gibt 65
zurück, den Unicode-Wert für A.
"ABC".charCodeAt(0); // returns 65
charCodeAt()
kann einzelne Surrogate zurückgeben, die keine gültigen Unicode-Zeichen sind.
const str = "𠮷𠮾";
console.log(str.charCodeAt(0)); // 55362, or d842, which is not a valid Unicode character
console.log(str.charCodeAt(1)); // 57271, or dfb7, which is not a valid Unicode character
Um den vollständigen Unicode-Codepunkt am angegebenen Index zu erhalten, verwenden Sie String.prototype.codePointAt()
.
const str = "𠮷𠮾";
console.log(str.codePointAt(0)); // 134071
Hinweis:
Vermeiden Sie die Neuumsetzung von codePointAt()
unter Verwendung von charCodeAt()
. Die Umwandlung von UTF-16-Surrogaten in Unicode-Codepunkte ist komplex, und codePointAt()
kann effizienter sein, da es direkt die interne Darstellung des Strings verwendet. Installieren Sie ein Polyfill für codePointAt()
, falls nötig.
Nachfolgend ist ein mögliches Algorithmus zur Umwandlung eines Paares von UTF-16-Code-Einheiten in einen Unicode-Codepunkt, adaptiert von den Unicode FAQ:
// constants
const LEAD_OFFSET = 0xd800 - (0x10000 >> 10);
const SURROGATE_OFFSET = 0x10000 - (0xd800 << 10) - 0xdc00;
function utf16ToUnicode(lead, trail) {
return (lead << 10) + trail + SURROGATE_OFFSET;
}
function unicodeToUTF16(codePoint) {
const lead = LEAD_OFFSET + (codePoint >> 10);
const trail = 0xdc00 + (codePoint & 0x3ff);
return [lead, trail];
}
const str = "𠮷";
console.log(utf16ToUnicode(str.charCodeAt(0), str.charCodeAt(1))); // 134071
console.log(str.codePointAt(0)); // 134071
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-string.prototype.charcodeat |
Browser-Kompatibilität
BCD tables only load in the browser