使用扩展运算符时,会创建一个新对象:
const foo = { a: 1 }
const m1 = {...foo}
const m2 = {...foo}
m1 === m2 // false
但是,使用Array.fill()时,情况并非如此:
const m3 = Array(2).fill({...foo})
m3[0] === m3[1] // true
我尝试了几种不同的方法,但我总是以.fill()传递引用而不是创建新对象。知道为什么会这样吗?
我尝试过的替代方案:
foo每次调用时都会创建一个新对象。 我已经尝试过传播和没有
const foo = () => ({ a: 1 })
const m4 = Array(2).fill({...foo()})
m4[0] === m4[1] // true
其中数组是在hand之前定义的,spread运算符也在.fill()中使用。
const m5 = Array(2)
m5.fill({...foo()})
m5[0] === m5[1] // true