如何判断某个字符串长度(要求支持表情)?
大家看到题目,可能首先想到的是 str.length
获取字符串的长度。
其实 JS 中的字符串长度是个奇怪的设定,很多编程语言,获取字符串的长度是得到字节长度,比如一个正常的汉字是两个字节,但在 js 中,'汉'.length 是 1 。看上去很方便,殊不知,这个特性埋下的坑。
比如:
😀 : '😀'.length 得到的是 2
𠮷 : '𠮷''.length 得到的也是 2
ES6 里添加了一个东西叫字符串迭代器,还添加了一个东西叫 unicode 正则模式,它们也不能直接统计字符数,而是可以把字符串拆成一个字符的数组,你可以间接的计算出字符个数。
使用字符串的Iterator统计长度,如下例子:
const testStr = '123 '
for(let c of testStr) {
console.log(c)
}
// 1
// 2
// 3
//
console.log([...testStr].length)
// 4
使用 Array.from
替换,并且封装一下:
function unicodeLength(str) {
return Array.from(str).length
}