codePointAt和charCodeAt区别在哪呢?
我们通过代码试一下
'䪟'.charCodeAt(0) // 4a9f
'䪟'.codePointAt(0) // 4a9f
我们发现都一样额 我们去看下文档解释 传送门
The codePointAt() method returns a non-negative integer that is the Unicode code point value.
The charCodeAt() method returns an integer between 0 and 65535 representing the UTF-16 code unit at the given index
在这里出现了65535 我们去看下65525十六进制ffff
那就是说在unicode中0000-ffff我们可以用charCodeAt 但是超出了就不行
因为我们的'䪟'的十六进制4a4f在ffff之间所以这两个没区别
那我们换一个在Unicode中超出ffff的试下(所谓超出ffff就是要用四个字节表示 因为JS采取的是UTF-16储存 所以一般都是两个字节储存 但是一旦超过ffff后就需要4个字节储存。因为十六进制就变成五位了。对于这种4个字节的字符,JavaScript 不能正确处理 所有ES6有了codePointAt)
'𠮷'.charCodeAt(0) // 55362
'𠮷'.codePointAt(0) // 134071
'𠮷'.codePointAt(0).toString(16) // 20bb7
因为'𠮷'在unicode中16进制超过了ffff 所以我们用charCodeAt就返回错误答案
这时候只能用codePointAt才能正确返回10进制
这就是为什么更新了codePointAt和fromCodePoint
网友评论