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 charCodeAt()
-Methode von String
-Werten gibt eine ganze Zahl zwischen 0
und 65535
zurück, die die UTF-16-Code-Einheit am angegebenen Index darstellt.
charCodeAt()
durchsucht die Zeichenfolge immer als eine Sequenz von UTF-16 Code-Einheiten, sodass es möglicherweise einsame Surrogate zurückgibt. Um den vollständigen Unicode-Codepunkt am angegebenen Index zu erhalten, verwenden Sie String.prototype.codePointAt()
.
Probieren Sie es aus
const sentence = "The quick brown fox jumps over the lazy dog.";
const index = 4;
console.log(
`Character code ${sentence.charCodeAt(index)} is equal to ${sentence.charAt(
index,
)}`,
);
// Expected output: "Character code 113 is equal to q"
Syntax
charCodeAt(index)
Parameter
index
-
Nullbasierter Index des zurückzugebenden Zeichens. In eine ganze Zahl konvertiert —
undefined
wird in 0 umgewandelt.
Rückgabewert
Eine ganze Zahl zwischen 0
und 65535
, die den UTF-16-Code-Einheitswert des Zeichens am angegebenen index
darstellt. Wenn index
außerhalb des Bereichs von 0
– str.length - 1
liegt, gibt charCodeAt()
NaN
zurück.
Beschreibung
Zeichen in einer Zeichenfolge werden von links nach rechts indiziert. Der Index des ersten Zeichens ist 0
, und der Index des letzten Zeichens in einer Zeichenfolge, die str
genannt wird, ist str.length - 1
.
Unicode-Codepunkte liegen im Bereich von 0
bis 1114111
(0x10FFFF
). charCodeAt()
gibt immer einen Wert kleiner als 65536
zurück, da die höheren Codepunkte durch ein Paar 16-Bit-Surrogat-Pseudozellen 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 eine Zeichenfolge mit zwei Zeichen manipuliert würde), oder codePointAt(i)
stattdessen zu verwenden. Für Informationen über Unicode siehe UTF-16-Zeichen, Unicode-Codepunkte und Graphemtreffer.
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 es, codePointAt()
durch charCodeAt()
neu zu implementieren. Die Übersetzung von UTF-16-Surrogaten zu Unicode-Codepunkten ist komplex, und codePointAt()
kann performanter sein, da es direkt die interne Darstellung der Zeichenfolge verwendet. Installieren Sie bei Bedarf ein Polyfill für codePointAt()
.
Unten ist ein möglicher Algorithmus zur Umwandlung eines Paares von UTF-16-Code-Einheiten in einen Unicode-Codepunkt, adaptiert aus der 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® 2026 Language Specification # sec-string.prototype.charcodeat |