Метод charCodeAt() вертає ціле число в діапазоні між 0 та 65535, що відображає кодову одиницю UTF-16 за наданим індексом.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Кодова одиниця UTF-16 співпадає з кодом символа Юнікоду для кодів символів, які можуть бути представлені єдиною кодовою одиницею UTF-16. Якщо код символа Юнікоду не може бути представлений єдиною кодовою одиницею UTF-16 (бо його значення більше за 0xFFFF), тоді повернена кодова одиниця буде першою частиною сурогатної пари для коду символа. Якщо вам потрібен весь код символа, використовуйте codePointAt().
Синтаксис
str.charCodeAt(index)
Параметри
index- Ціле число, що більше або дорівнює
0та менше за довжину рядка. Якщоindexне є числом, він за замовчуванням прирівнюється до0.
Значення, що повертається
Число, що відображає значення кодової одиниці UTF-16 для символа за наданим індексом index. Якщо index знаходиться за межами діапазону, charCodeAt() повертає NaN.
Опис
Коди символів Юнікоду знаходяться в діапазоні від 0 до 1114111 (0x10FFFF). Перші 128 кодів символів Юнікоду повністю співпадають з кодуванням символів ASCII. (Інформацію щодо Юнікоду дивіться у Посібнику JavaScript.)
Заувага: charCodeAt() завжди поверне значення, менше за 65536. Тому що більші коди символів відображаються парою (з меншим значенням) "сурогатних" псевдосимволів, що складають реальний символ.
Тому, щоб дослідити (чи відтворити) повний символ для значень окремих символів від 65536 та більше, для таких символів необхідно отримувати не лише charCodeAt(i), але також charCodeAt(i+1) (ніби маніпулюючи рядком з двох літер), або використовувати замість цього codePointAt(i). Дивіться приклади 2 та 3 (нижче).
charCodeAt() повертає NaN, якщо наданий індекс менший за 0, або якщо він дорівнює чи перевищує значення довжини рядка.
Зворотня сумісність: У історичних версіях (наприклад, JavaScript 1.2) метод charCodeAt() вертає число, що вказує значення набору символів ISO-Latin-1 для символа за наданим індексом. Набір символів ISO-Latin-1 знаходиться в діапазоні від 0 до 255. Перші 0-127 повністю співпадають з набором символів ASCII.
Приклади
Використання charCodeAt()
Наступний приклад вертає 65, значення Юнікоду для A.
'ABC'.charCodeAt(0) // вертає 65
Виправлення charCodeAt() для обробки символів не базової багатомовної площини, якщо їхня наявність раніше у рядку невідома
Ця версія може використовуватись для циклів та подібного, коли невідомо, чи були присутні символи не з ББП до вказаної позиції.
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;
}
Специфікації
| Специфікація |
|---|
| ECMAScript (ECMA-262) The definition of 'String.prototype.charCodeAt' in that specification. |
Сумісність з веб-переглядачами
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
charCodeAt | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 4 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support 0.1.100 |
Legend
- Full support
- Full support