Слово «символ» неоднозначно в Unicode. Человек видит графему, протокол может считать кодовые точки или байты UTF-8, а JavaScript использует единицы UTF-16. WordCount показывает все четыре метрики.

Графемы следуют видимому тексту

Буква с комбинируемым ударением содержит две кодовые точки, но одну графему. Семейный emoji соединяет несколько emoji невидимыми соединителями и обычно считается одной графемой. Такая сегментация подходит для видимых лимитов, но целевая система может использовать другое правило.

Кодовые точки задают значения Unicode

Итерация Unicode считает кодовые точки, а не обязательно видимые символы. Селекторы варианта, модификаторы тона кожи и соединители — отдельные точки, хотя формируют одну видимую группу. Используйте эту метрику, только если контракт прямо говорит о кодовых точках.

JavaScript length считает единицы UTF-16

Большинству букв нужна одна единица UTF-16, а точке вне основной плоскости — суррогатная пара, то есть две. Длина строки точна для семантики JavaScript, но как число видимых символов она удивляет на emoji.