函数调用时使用

等价于apply的方式

  1. function fn (x, y, z) { }
  2. let args = [0, 1, 2]
  3. // apply语法
  4. fn.apply(null, args)
  5. // 展开语法
  6. fn(...args)

在new表达式中应用

在使用 new 关键字来调用构造函数时,不能直接使用数组 + apply 的方式(apply执行的是调用 [[Call]],而不是构造[[Constructor]]),所以可以使用展开语法展开构造函数的参数

  1. let dateFilelds = [1970, 0, 1]
  2. let d = new Date(...dateFilelds)

在字面量数组中使用

数组拷贝(浅拷贝)

展开语法和Object.assign()行为一致,都是浅拷贝

  1. let arr1 = [1, 2, 3]
  2. let arr2 = [...arr1]
  3. arr2.push(4)
  4. arr1 // [1, 2, 3]
  5. arr2 // [1, 2, 3, 4]

连接多个数组

  1. let arr1 = [0, 1, 2]
  2. let arr2 = [3, 4, 5]
  3. // 将arr2中的元素连接至arr1后面
  4. // 使用concat
  5. let arr3 = arr1.concat(arr2)
  6. // 使用展开语法
  7. let arr4 = [...arr1, ...arr2]

在数组开头插入新元素/数组

  1. let arr1 = [0, 1, 2]
  2. let arr2 = [3, 4, 5]
  3. // 将arr2中的元素插入arr1前面
  4. // 使用unshift,修改了原来的arr1
  5. Array.prototype.unshift(arr1, arr2) // arr1现在是 [3, 4, 5, 0, 1, 2]
  6. // 使用展开语法,将新生成的数组赋值给原来的arr1
  7. arr1 = [...arr2, ...arr1]

在字面量对象中使用

将已有对象的所有可枚举属性拷贝到新构造的对象中
  1. let obj1 = { name: 'lavine', age: 26 }
  2. let obj2 = { name: 'lonzo', age: 23 }
  3. let cloneObj = { ...obj2 } // { name: 'lonzo', age: 23 }