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 не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.