Spec-Zone.ru › JavaScript

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.

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-string.prototype.charat

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API