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

js
charCodeAt(index)

Parameter

index

Nullbasierter Index des zurückzugebenden Zeichens. In eine ganze Zahl konvertiertundefined 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 0str.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.

js
"ABC".charCodeAt(0); // returns 65

charCodeAt() kann einzelne Surrogate zurückgeben, die keine gültigen Unicode-Zeichen sind.

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

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

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

Browser-Kompatibilität

Siehe auch