Three ways to measure text
A character is not one universal unit. JavaScript’s string length counts UTF-16 code units: the 16-bit pieces used to store a string. Iterating a string with for…of instead counts Unicode code points. A grapheme cluster approximates one user-perceived character, and may contain several code points.
Compare the two accented-letter samples. Precomposed é is U+00E9: one cluster, one code point, one UTF-16 unit. The sequence e plus combining acute accent is U+0065 U+0301: one cluster, two code points, two units. They can look identical without having identical underlying strings.
Emoji make the distinction larger. The woman technologist with medium skin tone combines a woman, a modifier, a zero-width joiner and a laptop: one cluster, four code points, seven UTF-16 units. Two regional indicators usually form one flag cluster. Rendering depends on available fonts.
Normalization can give canonically equivalent strings a consistent representation. NFC can compose the accented-letter sequence; it does not turn every emoji sequence into one code point. This inspector leaves your input unchanged.
The tool uses Intl.Segmenter with grapheme granularity. Boundaries depend on the Unicode data implemented by your browser, so older browsers may disagree on newer sequences. Counts cover the whole input; the breakdown displays only the first 64 clusters. Line breaks and spaces count, even when they leave no visible ink.