1. Llamada de función sin Aplicar
A menudo usamos Function.prototype.apply, pasamos una matriz como parámetro y llamamos a una función con un conjunto de parámetros almacenados en la matriz.
function doStuff(x,y,z){}
var args = [0,1,2]
//调用函数,传递args参数
doStuff.apply(null,args)
Usando el operador de extensión, podemos llamar fácilmente a la función evitando el uso de aplicar, simplemente agregue el operador de extensión a la matriz
doStuff(...args)
2. Combinar matrices
arr.push(...arr2)//将arr2数组追加到数组arr的末尾
arr.unshift(...arr2)//将arr2追加到数组arr的开头
//整合两个数组,并且把某个数组放在另一个数组的任意特定位置上
var arr1 = [a,b]
var arr2 = [d,...arr1,e,f]
console.log(arr2) //[d,a,b,e,f]
3. Copia la matriz
过去是通过Array.prototype.slice来进行拷贝
//通过展开运算符进行拷贝
var arr = [1,2,3]
var arr2 = [...arr] //arr.slice()类似
arr2.push(4)
注意:数组的对象依然是引用值,所以不是任何东西都拷贝过去了
4. Convierta argumentos o NodeList a Array
Antes de que Array.prototype.slicel se usara para convertir objetos tipo Array como NodeList y argumentos en arreglos reales
Esto se logra fácilmente con el operador de propagación
[...document.querySelectorAll('div')]
甚至可以像数组一样获取参数
var myFun = function(...args){
//...
}
//也可以用Array.from达成相同的目的
5. Usa la función matemática
任何可接收任意数量的参数的函数,都可以使用展开运算符进行传参
let numbers = [2,3,5,1]
Math.min(...numbers) // 1
6. Deconstruir
let {x,y,...z} = {x:1,y:2,a:3,b:4}
console,log(x); //1
console.log(y); //2
console.log(z); //{a:3,b:4}
//将剩余的属性分配到展开运算符之后的z变量中