字符

字符

    ES 对Unicode的支持允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的Unicode码点,这种表示方法,码点在 \u0000~uFFFF 之间,超出这个范围的字符,需要用双字节的形式表示。

 

字符方法:

 String.fromCodePoint    用于从Unicode码点返回对应字符。

    codePointAt()   在JavaScript内部,字符以UTF-16的格式存储,每个字符固定为2个字节,对于哪些需要4个字节储存的字符,JavaScript就会人为他们是两个字符。对于这种4个字节的字符,JavaScript不能正确处理,字符串长度会误判为2。ES6提供的codePointAt()方法,能够正确处理4个字节储存的字符。

codePointAt()方法返回的是码点的十进制值,如果想要十六进制的值,可以使用toString() 方法转换下

let s = '𠮷a';

s.codePointAt(0).toString(16) // "20bb7"
s.codePointAt(2).toString(16) // "61"

     你可能注意到,codePointAt()方法的参数,仍然是不正确的,比如,字符a在字符串s的位置序号应该是1,但是必须向codePointAt()方法传入2,解决这个问题的方法有

1 使用for ... of 循环

let s = '𠮷a';
for (let ch of s) {
  console.log(ch.codePointAt(0).toString(16));
}

 

2 另外一种方法也可以,使用扩展运算符(...)进行展开操作

let arr = [...'𠮷a']; // arr.length === 2
arr.forEach(
  ch => console.log(ch.codePointAt(0).toString(16))
);

 

posted on 2021-04-19 18:53  zhishiyv  阅读(115)  评论(0编辑  收藏  举报

导航