展开语法和剩余语法是相反的,展开语法用来属性拷贝、数组复制,剩余语法用来做剩余参数,可以用来解构数组和对象。

  1. function add(a, b){
  2. return a + b
  3. }
  4. const args = [11, 12]
  5. add(...args) //实际上是这个 add.apply(undefined, args);

把 arguments 或 NodeList 转成数组

arguments是类数组

  1. var myFn = function(...args) {
  2. console.log(args.forEach) //ƒ forEach() { [native code] }
  3. console.log(arguments.forEach) //undefined
  4. }
  5. myFn()

合并数组

  1. arr1.push(...arr2)

快速赋值

构造字面量对象时,进行克隆或者属性拷贝(ECMAScript 2018规范新增特性):

  1. let objClone = { ...obj };
  2. let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };

剩余参数 rest parameter

  1. ```
  2. function max() {
  3. var values = Array.prototype.slice.call(arguments, 0);
  4. // ...
  5. }
  6. max(1,2,3);
  7. // replacement
  8. function max(...value) {
  9. // ...
  10. }
  11. max(1,2,3);

```