ECMAScript 2018

ECMAScript 2018 发布于 2018 年,本章介绍了 ECMAScript 2018 的新特性。

ECMAScript 2018 发布于 2018 年,本章介绍了 ECMAScript 2018 的新特性:

  • for await…of
  • Promise.finally()
  • 对象剩余属性
  • 新的正则表达式功能

JavaScript 异步迭代

ECMAScript 2018 添加了异步迭代器和可迭代对象。

对于异步迭代,我们可以在for/of循环中使用关键字 await

for await (variable of iterable) {
  // some code
}

Firefox 和 Safari 是第一批支持 JavaScript 异步迭代的浏览器:

Chrome Edge Firefox Safari Opera
Chrome 63 Edge 79 Firefox 57 Safari 11 Opera 50
2017-12 2020-06 2017-11 2017-09 2018-06

Promise.finally

ECMAScript 2018 完成了 Promise 对象的完整实现,添加了 Promise.finally

let myPromise = new Promise();

myPromise.then();
myPromise.catch();
myPromise.finally();

Chrome 和 Firefox 是第一批支持 Promise.finally 功能的浏览器:

Chrome Edge Firefox Safari Opera
Chrome 63 Edge 18 Firefox 58 Safari 11.1 Opera 50
2017-12 2018-11 2018-06 2018-03 2018-06

JavaScript 对象剩余属性

ECMAScript 2018 添加了剩余属性,这允许我们解析一个对象并将剩余属性收集到一个新对象上。

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x; // 1
y; // 2
z; // { a: 3, b: 4 }

Chrome、Firefox 和 Opera 是第一批支持对象剩余属性的浏览器:

Chrome Edge Firefox Safari Opera
Chrome 60 Edge 79 Firefox 55 Safari 11.1 Opera 47
2017-07 2020-06 2017-08 2018-03 2017-04

新的 JavaScript 正则表达式功能

ECMAScript 2018 添加了 4 个新的 RegExp 特性:

  • Unicode 属性转义 (\p{...})
  • 反向零宽断言 (?<=) 和 (?<!)
  • 命名捕获组
  • s 标志, 改变 . 匹配除回车外的任何单字符这种默认行为

Chrome 和 Firefox 是第一批支持所有新 RegExp 功能的浏览器:

Chrome Edge Firefox Safari Opera
Chrome 64 Edge 79 Firefox 78 Safari 12 Opera 51
2018-01 2020-01 2020-06 2018-09 2018-02