Javascript Spread Operator
{...a, ...b}
相当于 Object.assign({}, a, b)
。Object.assign
还能给已经存在的对象赋值,而且会触发 setter。Spread operator 是在创建对象,不会触发 setter。
[...a, ...b]
相当于 a.concat(b)
。
Spread operator 的结果是浅拷贝,如果要深拷贝可以用 structuredClone
。它能作用于数组字面量却不能作用于对象字面量,必须通过一个额外的变量来完成。(毕竟支持字面量的 spread 没有意义。)
一个非原生数组的对象想要在数组中展开,必须实现 Iterable
接口。