有人能向我解釋爲什麼以下的Javascript控制檯發生(節點7.2.0):例如,在JavaScript數組差異不同初始化方法
陣列I具有比例如II和III
不同的行爲實例我
> var x = new Array(3).fill(new Array(2).fill(0))
> x
[ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ]
> x[0][0] = 1;
> x
[ [ 1, 0 ], [ 1, 0 ], [ 1, 0 ] ]
例Ⅱ
> var y = [...new Array(3)].map(()=>{return [...new Array(2)].map(()=>0)})
> y
> [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ]
> y[0][0] = 1
> [ [ 1, 0 ], [ 0, 0 ], [ 0, 0 ] ]
實施例III
> var y = []
> y.push([ 0, 0 ])
> y.push([ 0, 0 ])
> y.push([ 0, 0 ])
> y
> [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ]
> y[0][0] = 1
> [ [ 1, 0 ], [ 0, 0 ], [ 0, 0 ] ]
看來不同的方式來初始化數組將使陣列的不同的行爲。我很困惑,並提前感謝你。
我不這麼認爲,我特別使用了new運算符來爲fill函數創建一個新數組,以避免使用相同的引用。 – weiway
'new Array()'創建一個*數組* *。 array.fill()不會創建副本,它只是將數組元素分配給傳遞給它的任何內容(在本例中爲單個數組)。 – mscdex