美文网首页
codePointAt和charCodeAt的区别

codePointAt和charCodeAt的区别

作者: 龚达耶 | 来源:发表于2020-05-03 04:21 被阅读0次

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

相关文章

网友评论

      本文标题:codePointAt和charCodeAt的区别

      本文链接:https://www.haomeiwen.com/subject/kgurghtx.html