函数调用时使用
等价于apply的方式
function fn (x, y, z) { }let args = [0, 1, 2]// apply语法fn.apply(null, args)// 展开语法fn(...args)
在new表达式中应用
在使用 new 关键字来调用构造函数时,不能直接使用数组 + apply 的方式(apply执行的是调用 [[Call]],而不是构造[[Constructor]]),所以可以使用展开语法展开构造函数的参数
let dateFilelds = [1970, 0, 1]let d = new Date(...dateFilelds)
在字面量数组中使用
数组拷贝(浅拷贝)
展开语法和
Object.assign()行为一致,都是浅拷贝
let arr1 = [1, 2, 3]let arr2 = [...arr1]arr2.push(4)arr1 // [1, 2, 3]arr2 // [1, 2, 3, 4]
连接多个数组
let arr1 = [0, 1, 2]let arr2 = [3, 4, 5]// 将arr2中的元素连接至arr1后面// 使用concatlet arr3 = arr1.concat(arr2)// 使用展开语法let arr4 = [...arr1, ...arr2]
在数组开头插入新元素/数组
let arr1 = [0, 1, 2]let arr2 = [3, 4, 5]// 将arr2中的元素插入arr1前面// 使用unshift,修改了原来的arr1Array.prototype.unshift(arr1, arr2) // arr1现在是 [3, 4, 5, 0, 1, 2]// 使用展开语法,将新生成的数组赋值给原来的arr1arr1 = [...arr2, ...arr1]
在字面量对象中使用
将已有对象的所有可枚举属性拷贝到新构造的对象中
let obj1 = { name: 'lavine', age: 26 }let obj2 = { name: 'lonzo', age: 23 }let cloneObj = { ...obj2 } // { name: 'lonzo', age: 23 }
