ECMAScript2018(es9)新特性
ECMAScript2018
(es9
)新特性
...
扩展运算符
之前es5
中的...
只能应用于数组,在es9
中,开始可以应用于对象了。
在之前,如果需要得到一个对象的浅拷贝。
或者需要重新计算对象的某些属性来替换原来的值,可能需要一个一个字段地去赋值。
而现在只需要使用...
,问题就可以简单化。
1 | const a = { val: 1, age: 22 }; |
上面这种就是展开一个对象。
之前如果需要从对象中提取某些属性时组合成新对象时,一般都是通过直接定义变量来保存,在丢到新对象里面
1 | function fn(a, b) { |
现在可以以更简单的方式进行编写。
1 | function fn(a, b) { |
在{}
内直接写明将要提取的属性名即可,当然如果不想要以原来的名字的话,还可以进行改变。
1 | function fn(a, b) { |
上面这种 var {s3, s4} = b
也就是解构一个对象。
和 es5
的数组 ...
非常相似,可以说是把数组那一套给搬到了对象上来。
Promise.prototype.finally
扩展了es5
的Promise
对象的方法。
finally
可以在Promise
被解决或者被拒绝的情况下都进行回调。
1 | const promise = new Promise((resolve, reject) => { |
上面两个finally
的回调在resolve
之后都会被执行。
而当被拒绝同样也执行finally
。
1 | const promise = new Promise((resolve, reject) => { |
finally
在某些情况下非常的方便。
比如现在在一个承诺中占据了某些资源,当然我们希望不管成功then
或者失败catch
都要把资源进行释放。
在没有finally
时可能就要在then
和catch
都要写这一段代码。
而现在有了finally
,代码就变得非常的清晰了。
for await...of
异步迭代器
异步的队列以同步的写法来编写,看起来更加的符合逻辑。
每次循环都得等到当前Promise
变成resolved
。
1 | async function fn() { |
注意for await
只能写在异步函数中,本质也是一个语法糖。
后记
es9
的话我个人感觉也是扩展实用的方法和特性来是写代码更加的方便。
除了上面说过的,es9
还有几个新的特性。
- 正则的扩展(后行断言,后行否定断言);
- 字符串的扩展。