字符
字符
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))
);
未完,待续......