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