函数调用时使用
等价于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后面
// 使用concat
let arr3 = arr1.concat(arr2)
// 使用展开语法
let arr4 = [...arr1, ...arr2]
在数组开头插入新元素/数组
let arr1 = [0, 1, 2]
let arr2 = [3, 4, 5]
// 将arr2中的元素插入arr1前面
// 使用unshift,修改了原来的arr1
Array.prototype.unshift(arr1, arr2) // arr1现在是 [3, 4, 5, 0, 1, 2]
// 使用展开语法,将新生成的数组赋值给原来的arr1
arr1 = [...arr2, ...arr1]
在字面量对象中使用
将已有对象的所有可枚举属性拷贝到新构造的对象中
let obj1 = { name: 'lavine', age: 26 }
let obj2 = { name: 'lonzo', age: 23 }
let cloneObj = { ...obj2 } // { name: 'lonzo', age: 23 }