ECMAScript 2017
JavaScript命名约定从ES1、ES2、ES3、ES5和ES6开始。
但是,ECMAScript 2016和2017并没有被称为ES7和ES8。
自2016年起,新版本按年份命名(ECMAScript 2016/2017/2018)。
ECMAScript 2018的新特性
本章讲介绍 ECMAScript 2018 的新特性:
- Asynchronous Iteration
- Promise Finally
- Object Rest Properties
- New RegExp Features
JavaScript Asynchronous Iteration
ECMAScript 2018添加了异步迭代器和iterables。
对于异步iterables,我们可以在 for/of 循环中使用 await 关键字。
for await () {}
Firefox和Safari是第一款支持JavaScript await 的浏览器:
方法 | |||||
---|---|---|---|---|---|
await | Chrome 63 | Edge 79 | Firefox 57 | Safari 11 | Opera 50 |
2017年12月 | 2020年1月 | 2017年11月 | 2017年9月 | 2018年1月 |
JavaScript Promise.finally
ECMAScript 2018使用 Promise.finally 全部完成 Promise 对象:
let myPromise = new Promise();
myPromise.then();
myPromise.catch();
myPromise.finally();
Firefox和Chrome是第一款支持 JavaScript 的 Promise.finally 的浏览器:
方法 | |||||
---|---|---|---|---|---|
Promise.finally | Chrome 63 | Edge 18 | Firefox 58 | Safari 11.1 | Opera 50 |
2017年12月 | 2018年11月 | 2018年1月 | 2018年5月 | 2018年1月 |
JavaScript Object Rest Properties
ECMAScript 2018添加了 rest 属性。
这使我们能够销毁一个对象,并将剩余部分收集到一个新对象上:
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x; // 1
y; // 2
z; // { a: 3, b: 4 }
Firefox和Chrome、Opera是第一款支持 JavaScript 对象的 rest 的浏览器:
方法 | |||||
---|---|---|---|---|---|
rest | Chrome 60 | Edge 79 | Firefox 55 | Safari 11.1 | Opera 47 |
2017年7月 | 2020年1月 | 2017年8月 | 2018年5月 | 2017年8月 |
New JavaScript RegExp Features
ECMAScript 2018增加了4个新的正则特性:
- Unicode Property Escapes (\p{…})
- Lookbehind Assertions (?<= ) and (?<! )
- Named Capture Groups
- s (dotAll) Flag
Firefox和Chrome是第一款支持 JavaScript 对象的 async 的浏览器:
方法 | |||||
---|---|---|---|---|---|
Chrome 64 | Edge 79 | Firefox 78 | Safari 12 | Opera 51 | |
2018年1月 | 2020年1月 | 2020年6月 | 2018年1月 | 2018年2月 |