用不同的方法來宣告a和b兩個兩層陣列,然後修改a和b的[0][0],為什麼a會出現這種結果呢? 有方法可以令a的結果和b一樣嗎?
抱歉,我有點不懂你的問題。
目前看起來是正確的輸出。
你所謂的結果一樣是指???
如果要一樣的話。就
b=a
好吧,我承認我在耍白。只是你的問題讓人搞不懂你要啥結果。
let a = new Array(3).fill(new Array(2).fill(2));
?
Array.fill()
這個問題是因為你用 fill
fill 填入物件有 pass by reference 的特性當 fill 方法獲得一個傳入的物件,會將傳入的物件位置進行複製,並把其參考值(reference)之拷貝填入陣列中。
let a = new Array(3).fill(new Array(2).fill(1));
// 可以看成
let in_a = new Array(2).fill(1);
let a = new Array(3).fill(in_a); // a = [ in_a, in_a, in_a ];
所以 a 陣列的值 都是參考同一個物件
改 a[0][0]
, a[1][0] a[2][0]
也會一樣變更