This page was translated from English by the community.Learn more and join the MDN Web Docs community.
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 июль 2015 г..
Сводка
МетодcharCodeAt() возвращает числовое значение Юникода для символа по указанному индексу (за исключением кодовых точек Юникода, больших 0x10000).
In this article
Синтаксис
str.charCodeAt(index)
Параметры
indexЦелое число больше, либо равное 0 и меньше длины строки; если параметр не является числом, он устанавливается в 0.
Описание
Кодовые точки Юникода простираются в диапазоне от 0 до 1114111 (0x10FFFF). Первые 128 кодовых точек Юникода напрямую отображаются в кодировку ASCII. Информацию по Юникоду смотрите вРуководстве по JavaScript.
Обратите внимание, что методcharCodeAt() всегда возвращает значение, меньшее 65536. Так происходит потому, что большие кодовые точки представляются парой (меньших значений) «суррогатных» псевдо-символов, которые используются для составления настоящего символа. Поэтому для того, чтобы получить полный символ для значений символов от 65536 и выше, необходимо получить не только значениеcharCodeAt(i), но также значениеcharCodeAt(i + 1) (как если бы строка состояла из двух букв). Смотрите второй и третий примеры ниже.
МетодcharCodeAt() возвращаетNaN, если указанный индекс меньше нуля или больше длины строки.
Обратная совместимость: в более старых версиях (например, в JavaScript 1.2) методcharCodeAt() возвращал число из кодировки ISO-Latin-1 по указанному индексу. Диапазон символов в кодировке ISO-Latin-1 простирается от 0 до 255. Первые 127 чисел напрямую отображаются в кодировку ASCII.
Примеры
>Пример: использование методаcharCodeAt()
В следующем примере возвращается число 65, значение Unicode для латинского символа «A».
"ABC".charCodeAt(0); // вернёт 65Пример: исправление методаcharCodeAt() для обработки символов не в Базовой многоязыковой плоскости, если их предыдущее присутствие в строке неизвестно
Эта версия может использоваться в циклах for, даже когда неизвестно, были ли до указанной позиции символы из не-БМП.
function fixedCharCodeAt(str, idx) { // например, fixedCharCodeAt('\uD800\uDC00', 0); // 65536 // например, fixedCharCodeAt('\uD800\uDC00', 1); // false idx = idx || 0; var code = str.charCodeAt(idx); var hi, low; // Старшая часть суррогатной пары (последнее число можно изменить на 0xDB7F, // чтобы трактовать старшую часть суррогатной пары в частной плоскости как // одиночный символ) if (0xd800 <= code && code <= 0xdbff) { hi = code; low = str.charCodeAt(idx + 1); if (isNaN(low)) { throw "Старшая часть суррогатной пары без следующей младшей в fixedCharCodeAt()"; } return (hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000; } if (0xdc00 <= code && code <= 0xdfff) { // Младшая часть суррогатной пары // Мы возвращаем false, чтобы цикл пропустил эту итерацию, // поскольку суррогатная пара // уже обработана в предыдущей итерации return false; // hi = str.charCodeAt(idx - 1); // low = code; // return ((hi - 0xD800) * 0x400) + // (low - 0xDC00) + 0x10000; } return code;}Пример: исправление методаcharCodeAt() для обработки символов не в Базовой многоязыковой плоскости, если их предыдущее присутствие в строке известно
function knownCharCodeAt(str, idx) { str += ""; var code, end = str.length; var surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; while (surrogatePairs.exec(str) != null) { var li = surrogatePairs.lastIndex; if (li - 2 < idx) { idx++; } else { break; } } if (idx >= end || idx < 0) { return NaN; } code = str.charCodeAt(idx); var hi, low; if (0xd800 <= code && code <= 0xdbff) { hi = code; low = str.charCodeAt(idx + 1); // Перешагиваем через один, поскольку один «символ» является частью суррогатной пары return (hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000; } return code;}Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-string.prototype.charcodeat> |