美文网首页
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