ES6入门之字符串的扩展

2022-07-26 14:09:36 浏览数 (1)

1. 字符的 Unicode 表示法

Javascript 中允许采用 uxxxx的形式表示一个字符,其中xxxx表示字符的Unicode码点。如下

代码语言:javascript复制
"u0061"

这种 表示有区间 只能在 0000 ~ FFFF之间,如果超出则需要用双字节的的形式表示

代码语言:javascript复制
"u20BB7uDFB1"

在ES6中,对字符串的写法做出了改变。改为将码点放入大括号中,就能正确读取该字符,如下:

代码语言:javascript复制
"u{20BB7}" // 吉

2. codePointAt()

Javascript内部,字符以 UTF-16的格式存储,每个字符固定为2个字节。对于需要4个字节储存的字符,JavaScript会认为它们是两个字符。如下:

代码语言: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';

代码语言:javascript复制
s.codePointAt(0) // 134071
s.codePointAt(1) // 57271

codePointAt() 方法是测试一个字符由两个字节还是四个字节组成的最简单的方法

3. String.fromCodePoint()

ES5 提供了 String.fromCharCode 方法 用于从码点返回对应字符,但是不能识别32位的UTR-16字符,ES6提供了 Sring.fromCodePoint() 方法 可以识别大于32位的。如果有多个参数则将合并。如下:

代码语言:javascript复制
String.fromCodePoint(0x20BB7)
// "


	

0 人点赞