前端知库

为什么字符串 length 不一定等于用户看到的字符数?

参考答案

JavaScript 字符串按 UTF-16 码元组织,length 统计码元数。一个码点可能占两个码元,而用户看到的一个字符又可能由多个码点组成,例如组合音标或某些 emoji 序列。

按用户感知字符截断时,可以评估 Intl.Segmenter 的 grapheme 粒度;按词或句子处理则选择相应粒度与语言环境。Array.from 或字符串迭代可以处理码点,但仍不等于完整的字素簇分割。

文本规范化、搜索比较与安全标识又是不同问题,不应把分割后的显示字符直接作为所有身份比较规则。需要确认目标浏览器支持,并用真实语言样本测试截断、计数与光标行为。