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']
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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