美文网首页
3-4字符串扩展

3-4字符串扩展

作者: 留白_汉服vs插画 | 来源:发表于2018-02-01 15:51 被阅读10次

    参考博客

    https://www.cnblogs.com/-simon/p/5944387.html

    1、Unicode表示法    2、遍历接口   3、模板字符串   4、新增方法(10个)

    因为有的方法是提议阶段,所以需要导入补丁,babel-polyfill

    对比不同的表示方法

    ES5中

    {console.log("a" ,'\u 0061')  //打印 a,a 但是如果有两个字节的时候,也就是大于'oxFFFF'

    console.log('s','\u20BB7') // s 口7 ,没有正常显示,超过了两个字节,也就是大于'oxFFFF'的时候,会解析成两个字符处理,前4后1.

    }

    ES6中:

    {console.log('s','\u{20bb7}')};// s 𠮷 ,用大括号时候,正常打印,没有问题

    对比1、charAt(),2、charCodeAt()  3、codePointAt()   4、formCharCode

    ES5中:

    {let s = '𠮷' ;

    console.log('length' ,s.length) ; //length 2   因为码值大于2个字节,所以做2字符处理。两个字节一个字符。

    console.log('0' ,s.charAt(0)) ;//0 乱码 

    console.log('1' ,s.charAt(1)) ;//1 乱码 

    console.log('at0' ,s.charCodeAt(0)) ;//at0 55362

    console.log('at1' ,s.charCodeAt(1)) ;//at1 57271 这里取得是码值。

    }

    ES6中:

    {let s1 = '𠮷a';

    console.log(('length' ,s1.length) ;//3  𠮷长度为2,加一个a,所以为3

    console.log(('code0' ,s1.codePointAt(0)) ;//code0  134071(这个是10进制,codePointAt是ES6中方法,会计算对应的4个字节码值,charCodeAt()只取2个字节 ) 

    console.log(('code1' ,s1.codePointAt(1).toString(16)) ;//code1 20bb7   取1的时候,和ES5中charCodeAt方法一样,两个字节。

    console.log(('code2' ,s1.codePointAt(2).toString(16)) ;//code2 97(就是a)   取1的时候,和ES5中charCodeAt方法一样,两个字节。

    }

    3、String.fromCodePoint()

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

    String.fromCharCode(0x20BB7)// "ஷ"

    上面代码中,String.fromCharCode不能识别大于0xFFFF的码点,所以0x20BB7就发生了溢出,最高位2被舍弃了,最后返回码点U+0BB7对应的字符,而不是码点U+20BB7对应的字符。

    ES6提供了String.fromCodePoint方法,可以识别0xFFFF的字符,弥补了String.fromCharCode方法的不足。在作用上,正好与codePointAt方法相反。

    String.fromCodePoint(0x20BB7)// "𠮷"String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y'// true

    上面代码中,如果String.fromCodePoint方法有多个参数,则它们会被合并成一个字符串返回。

    注意,fromCodePoint方法定义在String对象上,而codePointAt方法定义在字符串的实例对象上。

    相关文章

      网友评论

          本文标题:3-4字符串扩展

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