在JavaScript开发中,获取字符串长度是基础且常用的操作,大部分场景下我们可以直接使用字符串的length属性完成统计,但该方法并不适用于所有场景,尤其是当字符串包含特殊编码字符时,需要额外注意计算逻辑。

一、使用length属性获取基础字符串长度
JavaScript中每个字符串实例都自带length属性,该属性返回字符串中UTF-16编码单元的数量,这是最基础的获取字符串长度的方式,适用于仅包含基本拉丁字符的场景。
以下是基础使用示例:
// 基础字符串长度获取 let str1 = "hello world"; console.log(str1.length); // 输出11,每个字符对应一个UTF-16编码单元 let str2 = "测试字符串"; console.log(str2.length); // 输出5,每个中文汉字对应一个UTF-16编码单元
二、length属性的局限性
length属性统计的是UTF-16编码单元的数量,而不是肉眼可见的字符数量,当字符串中包含需要两个UTF-16编码单元表示的字符时,就会出现长度统计不符合预期的情况。
比如常见的emoji表情、部分生僻汉字都属于这类字符:
let str3 = "😊"; console.log(str3.length); // 输出2,emoji由两个UTF-16编码单元组成 let str4 = "𠮷"; // 生僻汉字,属于辅助平面字符 console.log(str4.length); // 输出2,同样需要两个编码单元
三、获取肉眼可见字符的真实长度
如果需要统计肉眼可见的字符数量,也就是符合Unicode字符计数的结果,可以使用Array.from()或者扩展运算符将字符串转为字符数组,再获取数组长度。
具体实现如下:
let str5 = "😊测试"; // 方法1:使用Array.from console.log(Array.from(str5).length); // 输出3,正确统计字符数量 // 方法2:使用扩展运算符 console.log([...str5].length); // 输出3,结果一致
四、不同场景下的选择建议
根据实际需求选择合适的统计方式:
- 如果是做基础的字符串遍历、截取等和编码单元相关的操作,直接使用length属性即可,符合JavaScript原生的字符串处理逻辑。
- 如果是需要展示给用户看的字符数量,比如输入框的字数统计,建议使用Array.from的方式,统计真实可见的字符数。
- 如果字符串中包含大量特殊编码字符,还可以使用
Intl.SegmenterAPI进行更精准的分段统计,不过需要注意该API的浏览器兼容性。
以下是Intl.Segmenter的使用示例:
// 使用Intl.Segmenter统计字符数,兼容性需注意
if (typeof Intl !== "undefined" && Intl.Segmenter) {
let str6 = "😊测试字符串";
let segmenter = new Intl.Segmenter("zh-CN", { granularity: "grapheme" });
let segments = Array.from(segmenter.segment(str6));
console.log(segments.length); // 输出5,精准统计用户感知的字符数
}| 统计方式 | 统计逻辑 | 适用场景 |
|---|---|---|
| length属性 | UTF-16编码单元数量 | 原生字符串操作、编码相关处理 |
| Array.from(str).length | Unicode字符数量 | 用户可见字数统计、展示类场景 |
| Intl.Segmenter | 用户感知的字形数量 | 复杂文字排版、精准字符统计 |
JavaScript字符串长度length属性字符编码Unicode修改时间:2026-06-03 01:01:12