1. 字符的 Unicode 表示法
Javascript 中允许采用 \uxxxx的形式表示一个字符,其中xxxx表示字符的Unicode码点。如下
"\u0061"
这种 表示有区间 只能在 0000 ~ FFFF之间,如果超出则需要用双字节的的形式表示
"\u20BB7\uDFB1"
在ES6中,对字符串的写法做出了改变。改为将码点放入大括号中,就能正确读取该字符,如下:
"\u{20BB7}" // 吉
2. codePointAt()
Javascript内部,字符以 UTF-16的格式存储,每个字符固定为2个字节。对于需要4个字节储存的字符,JavaScript会认为它们是两个字符。如下:
var s = "吉"
s.length // 2
s.charAt(0) // ''
s.charAt(1) // ''
s.charCodeAt(0) // 55362
s.charCodeAt(1) // 57271
上面代码中汉字吉 需要4个字节存储,但是JavaScript不能正确处理,字符串长度误判为2,而且charAt 方法无法读取字符,charCodeAt 只能返回前面两个字节和后面两个字节的值,ES6 提供了 codePointAt 方法能够正确处理4个字节存储的字符,返回一个字符的码点,如下:
let s = '吉a';
s.codePointAt(0) // 134071
s.codePointAt(1) // 57271
codePointAt() 方法是测试一个字符由两个字节还是四个字节组成的最简单的方法
3. String.fromCodePoint()
ES5 提供了 String.fromCharCode 方法 用于从码点返回对应字符,但是不能识别32位的UTR-16字符,ES6提供了 Sring.fromCodePoint() 方法 可以识别大于32位的。如果有多个参数则将合并。如下:
String.fromCodePoint(0x20BB7)
// "