Spec-Zone.ru › JavaScript

String.prototype.codePointAt()

Базовая поддержка Широко доступна

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

Метод codePointAt() объекта String возвращает неотрицательное целое число, представляющее значение Unicode code point символа, начинающегося с указанного индекса. Обратите внимание, что индекс по-прежнему основан на единицах кода UTF-16, а не на code points Unicode.

Попробуйте

const icons = "☃★♲";

console.log(icons.codePointAt(1));
// Expected output: "9733"

Синтаксис

codePointAt(index)

Параметры

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

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

Неотрицательное целое число, представляющее значение code point символа по указанному index.

  • Если index выходит за пределы диапазона 0 – str.length - 1, codePointAt() возвращает undefined.
  • Если элемент по index является ведущим суррогатом UTF-16, возвращается code point пары суррогатов.
  • Если элемент по index является замыкающим суррогатом UTF-16, возвращается только замыкающая единица кода суррогата.

Описание

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

Code points Unicode находятся в диапазоне от 0 до 1114111 (0x10FFFF). В UTF-16 каждый индекс строки является единицей кода со значением 0 – 65535. Code points с более высокими значениями представляются парой 16-битных псевдосимволов-суррогатов. Поэтому codePointAt() возвращает code point, который может занимать два индекса строки. Информацию о Unicode см. в разделе UTF-16 characters, Unicode code points, and grapheme clusters.

Примеры

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

"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

Цикл с использованием codePointAt()

Поскольку использование индексов строк для цикла приводит к тому, что один и тот же code point посещается дважды (один раз для ведущего суррогата, один раз для замыкающего суррогата), и во второй раз codePointAt() возвращает только замыкающий суррогат, лучше избегать циклов по индексу.

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'

Вместо этого используйте оператор for...of или разверните строку, оба из которых вызывают [Symbol.iterator]() строки, который итерирует по code points. Затем используйте codePointAt(0) для получения code point каждого элемента.

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']

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

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

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

Настольные компьютеры Мобильные устройства Сервер
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
codePointAt
41
12
29
28
9
41
29
28
9
4.0
41
9
1.0.0
1.0
4.0.0

См. также

  • Polyfill String.prototype.codePointAt в core-js
  • Polyfill String.prototype.codePointAt от es-shims
  • String.fromCodePoint()
  • String.fromCharCode()
  • String.prototype.charCodeAt()
  • String.prototype.charAt()

© 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/codePointAt

Spec-Zone.ru

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