ECMAScript 2018

JavaScript 命名约定始于 ES1、ES2、ES3、ES5 和 ES6。

但是,ECMAScript 2016 和 2017 未被称为 ES7 和 ES8。

自 2016 年以来,新版本按年份命名(ECMAScript 2016/2017/2018)。

ECMAScript 2018 中的新特性

本章介绍 ECMAScript 2018 的新特性:

  • 异步迭代
  • Promise Finally
  • 对象 Rest 属性
  • 新的 RegExp 特性

JavaScript 异步迭代

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

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

实例

for await () {}

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

Chrome IE Firefox Safari Opera
Chrome 63 Edge 79 Firefox 57 Safari 11 Opera 50
2017 年 12 月 January 2020 2017 年 11 月 2017 年 9 月 January 2018

JavaScript Promise.finally

ECMAScript 2018 使用 Promise.finally 完成了 Promise 对象的完整实现:

实例

let myPromise = new Promise();
myPromise.then();
myPromise.catch();
myPromise.finally();

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

Chrome IE Firefox Safari Opera
Chrome 63 Edge 18 Firefox 58 Safari 11.1 Opera 50
2017 年 12 月 2018 年 11 月 January 2018 March 2018 January 2018

JavaScript 对象 Rest 属性

ECMAScript 2018 添加了 Rest 属性。

这允许我们破坏一个对象并将剩余物收集到一个新对象上:

实例

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

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

Chrome IE Firefox Safari Opera
Chrome 60 Edge 79 Firefox 55 Safari 11.1 Opera 47
July 2017 January 2020 August 2017 March 2018 August 2017

New JavaScript RegExp Features

ECMAScript 2018 added 4 new RegExp features:

  • Unicode Property Escapes (\p{...})
  • Lookbehind Assertions (?<= ) and (?<! )
  • Named Capture Groups
  • s (dotAll) flag

Chrome and Firefox are the first browsers to support all new RegExp features:

Chrome IE Firefox Safari Opera
Chrome 64 Edge 79 Firefox 78 Safari 12 Opera 51
January 2018 January 2020 June 2020 September 2018 February 2018