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 |