由於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/