使用扩展运算符(Spread):...ES6

主要用途

一、函数参数

函数调用时(不是定义时)将参数变成单个依次传入:f( ...iterableObj )

这时三个点的意思就是:收集剩余的参数作为一个数组并存入该变量中

二、数组字面量

数组字面量中:[ ...iterableObj ]ES6

Array.from(obj)[...obj] 存在一个细微的差别:

  • Array.from 适用于类数组对象也适用于可迭代对象
  • Spread 语法只适用于可迭代对象

三、对象字面量

对象字面量中:{ ...iterableObj }ES2018

注意

  • 展开语法是浅拷贝
  • 展开语法用于可迭代对象时,使用内部迭代器;用于普通对象时,进行浅拷贝,类似 Object.assign()

NOTE

函数的 Rest 参数表示将剩余的参数列表转为数组,扩展运算符相反,是将可迭代对象展开到参数列表中