String.prototype.charAt()
Baseline Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Метод charAt() объекта String возвращает новую строку, состоящую из одной единицы кодов UTF-16 по указанному индексу.
charAt() всегда индексирует строку как последовательность единиц кодов UTF-16, поэтому он может возвращать одиночные суррогаты. Чтобы получить полное значение Unicode по указанному индексу, используйте String.prototype.codePointAt() и String.fromCodePoint().
Попробуйте
const sentence = "The quick brown fox jumps over the lazy dog.";
const index = 4;
console.log(`The character at index ${index} is ${sentence.charAt(index)}`);
// Expected output: "The character at index 4 is q"
Синтаксис
charAt(index)
Параметры
-
index - Индекс (начиная с 0) символа, который нужно вернуть. Преобразуется в целое число —
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()
Следующий пример отображает символы в разных местах строки "Brave new world":
const anyString = "Brave new world";
console.log(`The character at index 0 is '${anyString.charAt()}'`);
// No index was provided, used 0 as default
console.log(`The character at index 0 is '${anyString.charAt(0)}'`);
console.log(`The character at index 1 is '${anyString.charAt(1)}'`);
console.log(`The character at index 2 is '${anyString.charAt(2)}'`);
console.log(`The character at index 3 is '${anyString.charAt(3)}'`);
console.log(`The character at index 4 is '${anyString.charAt(4)}'`);
console.log(`The character at index 999 is '${anyString.charAt(999)}'`);
Эти строки отображают следующее:
The character at index 0 is 'B' The character at index 0 is 'B' The character at index 1 is 'r' The character at index 2 is 'a' The character at index 3 is 'v' The character at index 4 is 'e' The character at index 999 is ''
charAt() может возвращать одиночные суррогаты, которые не являются допустимыми символами Unicode.
const str = "𠮷𠮾"; console.log(str.charAt(0)); // "\ud842", which is not a valid Unicode character console.log(str.charAt(1)); // "\udfb7", which is not a valid Unicode character
Чтобы получить полное значение кодовой точки Unicode по указанному индексу, используйте метод индексации, который разделяет по кодовым точкам Unicode, такой как String.prototype.codePointAt() и расширение строк в массив кодовых точек Unicode.
const str = "𠮷𠮾"; console.log(String.fromCodePoint(str.codePointAt(0))); // "𠮷" console.log([...str][0]); // "𠮷"
Примечание: Избегайте повторной реализации приведенных выше решений с использованием charAt(). Определение одиночных суррогатов и их сопоставление — сложная задача, и встроенные API могут быть более производительными, поскольку они напрямую используют внутреннее представление строки. При необходимости установите полифилл для упомянутых выше API.
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
charAt |
1 |
12 |
1 |
3 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
См. также
String.prototype.indexOf()String.prototype.lastIndexOf()String.prototype.charCodeAt()String.prototype.codePointAt()String.prototype.split()String.fromCodePoint()- У JavaScript есть проблема с Unicode от Mathias Bynens (2013)
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt