ES6-标准入门·语法的扩展

2022-12-01 11:40:23 浏览数 (1)

语法的扩展

ES6 对语法进行了大量扩展,包括且不限于字符串、正则、数值、函数、数组、对象的扩展等,此篇总结 ES6 新增的一些常用的新语法,一起来学习新姿势。

字符串的扩展

ES6 加强了对 Unicode 的支持,并且扩展了字符串对象。

Unicode 表示法

JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为 2 个字节。但只限于码点在 u0000~uFFFF 之间的字符。对于 Unicode 码点大于 0xFFFF 的字符,需要 2 个字符,也就是 4 个字节存储。

同时如果在 u 后面码点大于 0xFFFF,需要加上花括号才能正确显示,如 u{20BB7}

代码语言:javascript复制
// 大括号表示法与 UTF-16 等价
'u{1F680}' === 'uD83DuDE80'

有了这种表示法之后,JavaScript 共有 6 种方法可以表示一个字符。

代码语言:javascript复制
'z' === 'z' // true
'172' === 'z' // true
'x7A' === 'z' // true
'u007A' === 'z' // true
'u{7A}' === 'z' // true

codePointAt() 和 fromCodePoint()

对于 4 个字节的字符,JavaScript 不能正确处理,字符串长度会被误判为 2,而且 charAt 方法无法读取整个字符,charCodeAt 方法只能分别返回前 2 个字节和后 2 个字节的值。

ES6 提供了 codePointAt 方法,能够正确处理 4 个字节储存的字符,返回一个字符的码点。

codePointAt 方法是测试一个字符是由 2 个字节还是 4 个字节组成的最简单方法。

代码语言:javascript复制
function is32Bit(c) {
  return c.codePointAt(0) > 0xffff
}

于此同时,ES6 提供了 String.fromCodePoint 方法,作用同 codePointAt 相反,新方法可以识别大于 0xFFFF 的字符,弥补了 String.fromCharCode 方法的不足。

代码语言:javascript复制
String.fromCodePoint(0x20bb7)
String.fromCodePoint(0x78, 0x1f680, 0x79) === 'xuD83DuDE80y' // true

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

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

遍历器接口

ES6 为字符串添加了遍历器接口,使得字符串可以由 for…of 循环遍历。同时,遍历器的最大优点是可以识别大于 0xFFFF 的码点,传统的 for 循环无法识别这样的码点。

代码语言:javascript复制
var text = String.fromCodePoint(0x20bb7)
for (let i of text) {
  console.log(i) // '


	

0 人点赞