4.1、字符的Unicode表示法


        /*
            es6 加强了对 Unicode 的支持,并且扩展了字符串对象.        
        */


        // Javascript允许采用 \uxxxx 形式表示一个字符,其中 xxxx 表示字符的 Unicode 码点.
        console.log('\u0061')        //a

        // 但是,这种表示法只限于码点在 \u0000 ~ \uFFFF 之间的字符.超出这个范围的字符,必须用 2 双汉字的形式表达
        console.log('\uD842\uDFB7')  //𠮷

        // ???
        // console.log('\u20BB7')       //7





        /*
            codePointAt()
            在Javascript内部,字符以 UTF-16 的格式储存,每个字符固定为 2 个字节.
            对于那些需要 4 个字节储存字符(Unicode码点大于0xFFFF的字符), Javascript会认为他们是 2 个字符.
        */

        var s = '𠮷'
        console.log(s.length)        //2
        console.log(s.charAt(0))     //?
        console.log(s.charAt(1))     //?
        console.log(s.charCodeAt(0)) //55362
        console.log(s.charCodeAt(1)) //57271

        // "𠮷" 的码点是 0x20BB7 , 
        // UTF-16 编码为 0xD842 0xDFB7 ,需要 4 个字节储存.对于这种4个字节的字符,Javascript不能正确处理,字符串长度会被误判为 2, 而且 charAt 方法无法读取整个字符,charCodeAt 方法只能分别返回前 2 个字节和后 2 个字节的值.
        // es6 提供了 codePointAt 方法,能够正确处理 4 个字节储存的字符,返回一个字符的码点.

        var s = '𠮷a'
        console.log(s.codePointAt(0)) //134071     第一个字符(𠮷的后两个字节)  返回十进制码点134071
        console.log(s.codePointAt(1)) //57271      第二个字符(𠮷的后两个字节)  
        console.log(s.codePointAt(2)) //97         第三个字符(a)



        // codePointAt 方法是测试一个字符是由 2 个字节还是 4 个字节组成的最简单方法.

        function is32Bit(c) {
            return c.codePointAt(0) > 0xFFFF
        }
        console.log(is32Bit('𠮷'))   //true   是4个字节
        console.log(is32Bit('a'))    //false  是2个字节




        /*
            String.fromCodePoint()
            es5 提供了 String.fromCharCode 方法,用于从码点返回对应字符,但是这个方法不能识别32位的 UTF-16 字符(Unicode 编号大于 0xFFFF)
        */

       console.log(String.fromCharCode(0x20BB7)) //ஷ

        // 上述代码中, String.fromCharCode 不能识别大于 0xFFFF 的码点

        // es6 提供了String.fromCodePoint 方法, 可以识别大于 0xFFFF 的字符, 弥补了 String.fromCharCode 的不足.

        console.log(String.fromCodePoint(0x20BB7)) //𠮷


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值