在Array()中使用Spread运算符.fill()

时间:2018-02-01 21:53:21

标签: javascript arrays ecmascript-6 pass-by-reference spread-syntax

使用扩展运算符时,会创建一个新对象:

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

0 个答案:

没有答案