console.log(String.fromCharCode(0x03FFFF).length)
string.length
将代码单元解释为单个字符,所以对于BMP之外的字符计算出错误的结果。 - user6445533当一个字符串包含实际文本数据时,每个元素被视为单个的 UTF-16 代码单元。
https://es5.github.io/ - rpadovani我相信rpadovani最好地回答了你的“为什么”问题,但对于在此情况下获得正确字形计数的实现,Lodash已经在其toArray模块中解决了这个问题。
例如,
_.toArray('12').length; // --> 3
或者,如果您想从字符串中删除一些任意的字符,可以通过操作和重新连接数组来实现,例如:
_.toArray("trimToEightGlyphs").splice(0,8).join(''); // --> 'trimToE'
Array.from('12').length // --> 3
。 - imolitconsole.log(Array.from("12").length);
- Anjan Talatam'Some text with emojis'.match(/./gu)
它应该返回:
[ "","S", "o", "m", "e", " ", "t", "e", "x", "t", " ", "w", "i", "t", "h", " ", "e", "m", "o", "j", "i", "s", ""]
.length
:''.match(/./gu).length == 1
/./gu
.
匹配任何单个字符。g
表示“全局”:基本上允许在第一个匹配后继续匹配。u
表示“Unicode”:它允许以正确的方式显示字符(如果没有它,则
会显示为��
(因此是2个字符))
顺便说一下,你可以添加 m
来支持多行匹配(/./gum
)
希望这有所帮助