String.prototype.charAt()
Метод charAt() (символ на позиції) значень String повертає новий рядок, що складається з єдиної кодової одиниці UTF-16, знайденої в рядку за переданим індексом.
Метод charAt() завжди індексує рядок як послідовність кодових одиниць UTF-16, тому може повертати самотні сурогати. Щоб отримати цілу кодову точку Unicode за вказаним індексом, слід використовувати String.prototype.codePointAt() і String.fromCodePoint().
Спробуйте його в дії
Синтаксис
charAt(index)
Параметри
indexІндекс від нуля символу, котрий необхідно повернути. Перетворюється на ціле число –
undefinedперекидається на 0.
Повернене значення
Рядок, що відповідає одному символу (рівно одній кодовій одиниці UTF-16) за вказаним індексом index. Якщо значення index виходить за межі діапазону 0 – str.length - 1, то метод charAt() поверне порожній рядок.
Опис
Символи в рядках індексуються зліва направо. Індексом першого елемента є 0, а індекс останнього символу в рядку, який, приміром, називається str, – str.length - 1.
Кодові точки Unicode мають діапазон від 0 до 1114111 (0x10FFFF). Метод charAt() завжди повертає символ, чиє значення – менше за 65536, тому що вищі кодові точки представляються парами 16-бітових сурогатних псевдосимволів. Таким чином, щоб отримати цілий символ зі значенням, більшим за 65535, потрібно отримати не лише charAt(i), а також і charAt(i + 1) (як якби оброблявся рядок з двома символами), або використати замість цього codePointAt(i) і String.fromCodePoint(). Про Unicode – дивіться Символи UTF-16, кодові точки Unicode та графемні кластери.
Метод charAt() – дуже подібний до використання квадратних дужок для звертання до символу за заданим індексом. Головні відмінності:
charAt()намагається перетворитиindexна ціле число, а квадратні дужки – ні, вони безпосередньо використовуютьindexяк ім'я властивості.charAt()повертає порожній рядок, якщоindexперебуває поза діапазоном прийнятних значень, а квадратні дужки –undefined.
Приклади
Застосування charAt()
Наступний приклад вибирає символи з різних місць рядка "Прекрасний новий світ" і друкує їх на екран:
const anyString = "Прекрасний новий світ";
console.log(`За індексом 0 знаходиться символ '${anyString.charAt()}'`);
// Ніякого індексу в метод не передано, використовується усталене значення 0
console.log(`За індексом 0 знаходиться символ '${anyString.charAt(0)}'`);
console.log(`За індексом 1 знаходиться символ '${anyString.charAt(1)}'`);
console.log(`За індексом 2 знаходиться символ '${anyString.charAt(2)}'`);
console.log(`За індексом 3 знаходиться символ '${anyString.charAt(3)}'`);
console.log(`За індексом 4 знаходиться символ '${anyString.charAt(4)}'`);
console.log(`За індексом 999 знаходиться символ '${anyString.charAt(999)}'`);
Ці рядки виведуть на екран наступне:
За індексом 0 знаходиться символ 'П'
За індексом 0 знаходиться символ 'П'
За індексом 1 знаходиться символ 'р'
За індексом 2 знаходиться символ 'е'
За індексом 3 знаходиться символ 'к'
За індексом 4 знаходиться символ 'р'
За індексом 999 знаходиться символ ''
Метод charAt() може повертати самотні сурогати, котрі не є дійсними символами Unicode.
const str = "𠮷𠮾";
console.log(str.charAt(0)); // "\ud842", що не є дійсним символом Unicode
console.log(str.charAt(1)); // "\udfb7", що не є дійсним символом Unicode
Щоб отримати всю кодову точку Unicode за заданим індексом, слід використати спосіб індексування, що розбиває рядок на кодові точки Unicode, наприклад, String.prototype.codePointAt(), або розгортання рядків у масив кодових точок Unicode.
const str = "𠮷𠮾";
console.log(String.fromCodePoint(str.codePointAt(0))); // "𠮷"
console.log([...str][0]); // "𠮷"
[!NOTE] Уникайте власних реалізацій рішень вище за допомогою
charAt(). Виявлення самотніх сурогатів та їх парування є складним, а вбудовані API можуть бути більш продуктивними, оскільки вони безпосередньо використовують приховане представлення рядка. Встановіть поліфіл для згаданих вище API, якщо це необхідно.
Специфікації
Сумісність із браузерами
| desktop | mobile | server | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
charAt
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |