ES2016, 2017, 2018的新特性


ES2016

1. Array.prototype.includes

快速查找数组中是否包含某个元素 (与indexOf最大的区别在于 includes支持NaN)

2. ** 指数函数的中缀形式

在ECMAScript2016中,我们可以使用 ** 来替代Math.pow **

ES2017

1. Object.values()

与 Object.keys()很相似,它返回一个数组,包含对象中自己所有属性的值。不含原型链上的

2. Object.entries()

此函数会将key和value以数组的形式都返回。

3. 字符串追加

新增两个字符串追加的方法String.prototype.padStart和String.prototype.padEnd,方便我们将一个新的字符串追加到某个字符串的头尾。

– 3.1 padStart()

– 3.2 padEnd()

4. Object.getOwnPropertyDescriptors()

这个函数的主要动机在于方便将一个对象深度拷贝给另一个对象,和Object.assign不同 getOwnPropertyDescriptors同时可以将getter/setter一并拷贝

5. Async/Await

新特性中最有用的就属这个功能了,Async函数可以帮助我们摆脱“回调地狱”,并且整个代码会更加简洁。
async 关键字 告诉JavaScript编译器对于标定的函数要区别对待。
await 运算符 用于等待Promise处理完成,并且仅在异步函数(async函数)内有效。

4. 正则表达式命名捕获组

以前要在YYYY-MM-DD的格式的日期中,取出年 月 日:

这样的代码很难读懂,并且改变正则表达式的结构有可能改变匹配对象的索引。
ES2018允许命名捕获组使用符号?,在打开捕获括号(后立即命名,改写如下:

任何匹配失败的命名组都将返回undefined。

命名捕获也可以使用在replace()方法中。例如将日期转换为美国的 MM-DD-YYYY 格式: