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 виходить за межі діапазону 0str.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
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Deno Node.js
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

Дивіться також