Вебсправочник
Справочник JavaScript

String.codePointAt(): кодовая точка по позиции в строке

Метод codePointAt возвращает числовую кодовую точку Unicode с указанной позиции. При этом сама позиция отсчитывается в кодовых единицах UTF-16, а не в видимых символах.

Назначение

Метод codePointAt возвращает числовую кодовую точку Unicode с указанной позиции. При этом сама позиция отсчитывается в кодовых единицах UTF-16, а не в видимых символах.

Как это работает

Если индекс указывает на начало корректной суррогатной пары, метод учитывает обе её части. Если на вторую часть — возвращает значение этой отдельной кодовой единицы. Позиция за пределами строки даёт undefined.

Пример

const text = "A😀B";
console.assert(text.length === 4);
console.assert(text.codePointAt(0) === 65);
console.assert(text.codePointAt(1) === 0x1F600);
console.assert(text.codePointAt(2) === 0xDE00);
console.assert(text.codePointAt(4) === undefined);
console.log([...text].map(char => char.codePointAt(0).toString(16)));

Что должно получиться

Проверки показывают четыре кодовые единицы для трёх кодовых точек. Итерация через spread в этом примере получает целые кодовые точки, поэтому эмодзи не разбивается на две записи.

Граница применения и частая ошибка

Кодовая точка не всегда равна одному видимому символу: буква с комбинируемым знаком и составной эмодзи могут включать несколько точек. Не увеличивайте индекс на единицу в расчёте на каждый пользовательский символ.

Самостоятельная проверка

Сравните обычную латинскую букву, эмодзи и букву с комбинируемым ударением. Запишите length, число элементов spread и число визуальных знаков. Для пользовательских ограничений длины выберите подходящий уровень подсчёта.

Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.