Spec-Zone.ru › JavaScript

String.prototype.charCodeAt()

Baseline Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Метод charCodeAt() объектов String возвращает целое число от 0 до 65535, представляющее кодовую единицу UTF-16 по указанному индексу.

charCodeAt() всегда индексирует строку как последовательность кодовых единиц UTF-16, поэтому он может возвращать одиночные суррогаты. Чтобы получить полную кодовую точку Unicode по указанному индексу, используйте String.prototype.codePointAt().

Попробуйте

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"

Синтаксис

charCodeAt(index)

Параметры

index
Нулевой индекс символа, который нужно вернуть. Преобразуется в целое число — undefined преобразуется в 0.

Возвращаемое значение

Целое число от 0 до 65535, представляющее значение кодовой единицы UTF-16 символа по указанному index. Если index выходит за диапазон 0 – str.length - 1, charCodeAt() возвращает NaN.

Описание

Символы в строке индексируются слева направо. Индекс первого символа равен 0, а индекс последнего символа в строке под названием str равен str.length - 1.

Кодовые точки Unicode находятся в диапазоне от 0 до 1114111 (0x10FFFF). charCodeAt() всегда возвращает значение меньше 65536, потому что более высокие кодовые точки представлены *парой* 16-битных псевдосимволов-суррогатов. Следовательно, чтобы получить полный символ со значением больше 65535, необходимо получить не только charCodeAt(i), но и charCodeAt(i + 1) (как при работе со строкой из двух символов) или использовать codePointAt(i) вместо этого. Информацию о Unicode см. в разделе UTF-16 characters, Unicode code points, and grapheme clusters.

Примеры

Использование charCodeAt()

Следующий пример возвращает 65, значение Unicode для A.

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

charCodeAt() может возвращать одиночные суррогаты, которые не являются допустимыми символами Unicode.

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

Чтобы получить полную кодовую точку Unicode по указанному индексу, используйте String.prototype.codePointAt().

const str = "𠮷𠮾";
console.log(str.codePointAt(0)); // 134071

Примечание: Избегайте переimplementации codePointAt() с использованием charCodeAt(). Преобразование из суррогатов UTF-16 в кодовые точки Unicode является сложным, и codePointAt() может быть более производительным, так как он напрямую использует внутреннее представление строки. При необходимости установите полифилл для codePointAt().

Ниже приведен возможный алгоритм преобразования пары кодовых единиц UTF-16 в кодовую точку Unicode, адаптированный из 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

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-string.prototype.charcodeat

Совместимость с браузерами

Десктоп Мобильные Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
charCodeAt
1
12
1
4
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

См. также

  • String.fromCharCode()
  • String.prototype.charAt()
  • String.fromCodePoint()
  • String.prototype.codePointAt()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API