让函数的 Apply 调用方式成为过去
有时候我们需要通过 Function.prototype.apply 来调用函数,参数就放在一个数组里。
1 | function doStuff (x, y, z) { } |
现在有了展开运算符,我们可以完全避免使用 apply,只需在调用函数时在数组前加上展开运算符:
1 | doStuff(...args); |
代码变得更短、更简洁,也不需要一个毫无用处的 null!
合并数组
合并数组有各种方式,但是展开运算符为我们提供了一种新思路:
1 | arr1.push(...arr2) // 在数组后面添加 arr2 里的元素 |
代码少了很多,还可以随意控制位置!
拷贝数组
拷贝数组是个常见的任务,过去我们使用 Array.prototype.slice
来完成,但现在我们可以通过展开运算符得到数组的副本:
1 | var arr = [1,2,3]; |
这里要注意,数组里的对象仍然是引用类型的,因此实际上并不是所有内容都被“拷贝”了。
将参数或 NodeList 转成数组
跟拷贝数组类似,我们用 Array.Prototype.slice 将 NodeList 和 arguments 对象转成真正的数组,但是现在我们可以使用展开运算符完成这个任务:
1 | [...document.querySelectorAll('div')] |
你甚至可以从函数签名里得到数组形式的参数:
1 | var myFn = function(...args) { |
Array.from 也可以做同样的事情。
使用 Math对象里的相关函数
在参数个数不确定的函数里使用展开运算符,再合适不过了。
1 | let numbers = [9, 4, 7, 1]; |
对象解构
解构操作在变量批量赋值上非常方便,省去了繁琐的声明和赋值操作。配合使用展开运算符,进一步简化操作:
1 | let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; |