…(此处应有乌鸦飞过)运算符
当我和别人聊天的时候,别人说了一句让我很无语的话的时候,我会输入…,或者double…,es6新特性中,三个点竟成了运算符,我们来看看到底es6委员会辛辛苦苦到底做了什么,会不会让我们让我们无语的输入…
言归正传,...
作为运算符时,学名叫扩展(spread
)运算符,允许一个可迭代对象在位置上按序展开。比如一个数组字面量,使用了扩展运算符就可以将元素迭代展开,作为函数参数被调用的数组字面量也可以使用该运算符。如果作用在一个对象(该对象必须可迭代)字面量上,此时的作用就是迭代键值对(对象迭代处于ECMAScript Stage 3
的草案中)。
可迭代对象和迭代器部分,可以参考这篇文章,异步编程之generator
函数调用
代替apply
|
|
new构造函数
当用new调用构造函数时,不能直接用数组和apply,但是有了扩展运算符,数组就可以轻松调用了
|
|
数组字面量
扩展运算符后的变量必须为可迭代对象,在可迭代对象内部通过for…of遍历值,所以可以方便的进行一些操作
合并数组
|
|
复制数组
|
|
生成数组
根据扩展运算符可以跟数组的原理,可以通过解构赋值,将数组反求出来
当然扩展运算符不止可以用于数组,只要是可迭代对象都可以,所以另一种用途就是将其他可迭代对象转化为数组,比如Set
,Map
,Generator
|
|
可迭代对象(stage 3 draft
)
ECMAScript proposal (stage 3)为对象增加了==扩展属性==,复制自身可枚举属性到一个新的对象中。
浅拷贝或者对象合并现在可以丢掉Object.assign()
使用一种更简洁的写法了。不同之处是,Object.assign()
可以触发setters
,扩展属性不可以
|
|
与之对应的有一个叫rest运算符,是spread的逆运算,两者可以对比着学习
函数rest参数
...
+变量,在函数定义的时候称为rest参数,这样就不用再使用arguments对象了,rest参数将参数放入数组中
|
|
注意:
- 和spread运算符类似的是,都必须放到最后一位,否则报错
- 函数的length属性不包括rest参数