前言
es6中增加了扩展运算符(spread),即… 三个点。
比较容易弄混的是数组中的spread和对象中的spread。
数组的spread
扩展运算符(spread)是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
1 | console.log(...[1, 2, 3]) |
参数序列是重点。
对象的spread
对象的扩展运算符(…)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。
1 | let z = { a: 3, b: 4 }; |
重点是拷贝到当前对象之中。这句话的意思是说对象的spread要“依赖于”对象。
举例
1 | console.log(...[2, 3, 4]) |
为什么后者会报错?
因为对象spread依赖于“对象”,改成这样就好了:
1 | console.log({...{a: 3, b: 4}};) |
数组spread扩展
转换为数组:
扩展运算符内部调用的是数据结构的 Iterator 接口,因此只要具有 Iterator 接口的对象,都可以使用扩展运算符,比如 Map 结构。
1 | let map = new Map([ |