Вебсправочник
Основы веб-разработки

Видимый символ, кодовая точка и длина строки

Количество видимых знаков может отличаться от длины строки JavaScript и от количества кодовых точек Unicode.

Назначение

Количество видимых знаков может отличаться от длины строки JavaScript и от количества кодовых точек Unicode.

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

length считает единицы UTF-16. Перебор строки через spread работает с кодовыми точками, а графемный кластер может включать несколько точек. Intl.Segmenter с granularity:grapheme помогает разделить текст ближе к пользовательскому восприятию.

Пример

const text="é";
const segmenter=new Intl.Segmenter("ru",{granularity:"grapheme"});
console.assert(text.length===2);
console.assert([...segmenter.segment(text)].length===1);

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

Разложенная буква занимает две единицы UTF-16, но один графемный кластер. Это не означает, что каждый видимый знак всегда занимает одинаковое число байтов или кодовых точек.

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

Не обещайте лимит «100 символов», если разные части приложения считают разные сущности. Для хранения, ввода и отображения нужно согласовать правило и отдельно проверять поддержку API.

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

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

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