在ES6中,我们有了一个新的运算符–展开运算符,它可以使我们的代码的数量有一定的减少,有时候甚至有很有用的作用,我们来举几个常用的例子,同时通过例子来了解展开运算符的使用。
1.apply中的使用
当我们的函数有多个变量的时候(特别是当我们不知道变量的数量的时候),有时候会通过将变量保存在数组中,并通过call
来执行函数,有了展开运算符后则有了更好的方式(毕竟使用call
需要手动指定this
,有时候会不是很方便很准确)
1 | // 一般 |
除此之外还可以
1 | // 需要传入不定数量的参数,同时最后一个参数为需要指定的值 |
总的来说,使多参数的函数调用有了新的方式, 而且避免的作用域的问题。
2.数组中的使用
数组的合并
1 | var a = [1, 2]; |
数组的分割
1 | var [a, ...b] = [0, 1, 2]; |
数组的拷贝
1 | var a = [1, 2]; |
3.对象中的使用
这里的对象是指类似{a:1}
这样的对象,因为数组,函数也是对象中的一种。
1 | let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; |
这个在函数的参数中也有很好的用处
1 | function test(...args) { |
可能会有人说arguments
本身就可以啊,但是arguments
本身并不是数组,所以无法直接对arguments
进行数组操作。
类外,在Node中有很多的回调函数都是以error
为第一返回值,其实很多接口都是那么设计的。那么我们可以很方便的分离error
和其他参数
1 | request.get('./demo', (e, ...data) => { |
不过现在的ES6
中还不支持在对象中使用扩展运算符,这个还在ES7
的草案中,不过我们可以使用babel
来处理。
最后写一个例子吧,在github上有这个一个库https://github.com/sindresorhus/pify
用于将回调的函数改为promise
形式
1 | const fs = require('fs'); |