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 接口。