--- title: String.prototype.charCodeAt() slug: Web/JavaScript/Reference/Global_Objects/String/charCodeAt tags: - JavaScript - String - Unicode - метод translation_of: Web/JavaScript/Reference/Global_Objects/String/charCodeAt ---
Метод charCodeAt() вертає ціле число в діапазоні між 0 та 65535, що відображає кодову одиницю UTF-16 за наданим індексом.
Кодова одиниця UTF-16 співпадає з кодом символа Юнікоду для кодів символів, які можуть бути представлені єдиною кодовою одиницею UTF-16. Якщо код символа Юнікоду не може бути представлений єдиною кодовою одиницею UTF-16 (бо його значення більше за 0xFFFF), тоді повернена кодова одиниця буде першою частиною сурогатної пари для коду символа. Якщо вам потрібен весь код символа, використовуйте {{jsxref("Global_Objects/String/codePointAt", "codePointAt()")}}.
str.charCodeAt(index)
index0 та менше за довжину рядка. Якщо index не є числом, він за замовчуванням прирівнюється до 0.Число, що відображає значення кодової одиниці UTF-16 для символа за наданим індексом index. Якщо index знаходиться за межами діапазону, charCodeAt() повертає {{jsxref("Global_Objects/NaN", "NaN")}}.
Коди символів Юнікоду знаходяться в діапазоні від 0 до 1114111 (0x10FFFF). Перші 128 кодів символів Юнікоду повністю співпадають з кодуванням символів ASCII. (Інформацію щодо Юнікоду дивіться у Посібнику JavaScript.)
Заувага: charCodeAt() завжди поверне значення, менше за 65536. Тому що більші коди символів відображаються парою (з меншим значенням) "сурогатних" псевдосимволів, що складають реальний символ.
Тому, щоб дослідити (чи відтворити) повний символ для значень окремих символів від 65536 та більше, для таких символів необхідно отримувати не лише charCodeAt(i), але також charCodeAt(i+1) (ніби маніпулюючи рядком з двох літер), або використовувати замість цього codePointAt(i). Дивіться приклади 2 та 3 (нижче).
charCodeAt() повертає {{jsxref("Global_Objects/NaN", "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;
}
| Специфікація |
|---|
| {{SpecName('ESDraft', '#sec-string.prototype.charcodeat', 'String.prototype.charCodeAt')}} |
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.
{{Compat("javascript.builtins.String.charCodeAt")}}