由于JavaScript使用UTF-16(2个字节)作为一个单元来存储字符,对于一些字符串中包含:4字节或更多字节的字符,使用length就不能得到正确的字符个数。用如下方法可以很简单的获取字符串中精确的字符个数:
字符串的遍历器接口
ES6 为字符串添加了遍历器接口(详见《Iterator》一章),使得字符串可以被 for...of 循环遍历。
function testString() {
let str = "Hi?⚽?";
// console.log(str.length); // output: 7
// Calculate Character counts.
// Way1:
let tmpArr = [...str];
console.log(`Way1: char count is ${tmpArr.length}`); // output: 5
// Way2:
let charCount = 0;
for (const ch of str) {
charCount++;
}
console.log(`Way2: char count is ${charCount}`); // output: 5
}
这个遍历器最大的优点是可以识别大于 0xFFFF 的码点.
即,for...of循环遍历能够正确计算出一个字符串个各个字符,在该循环中加一个计数器即可算出字符个数。
一些讨论:
https://coolaj86.com/articles/how-to-count-unicode-characters-in-javascript/