JavaScript 建立存放物件的陣列注意的問題
阿新 • • 發佈:2019-02-01
先來看下面的JavaScript 程式碼,看看會得到什麼結果:
var a = new Array();
var b = new Array();
for(i = 0; i < 10; i++) {
a.push(i);
b.push(a);
}
console.log(b);
執行上述程式碼後,控制檯輸出的是一個二維陣列,如下:因為在上述程式碼 b.push(a)中,b陣列中的每一個一維陣列存放的都是a的引用,當陣列a改變,b陣列中的每個一維陣列也跟著改變。整個for迴圈執行完之後,b數組裡面的每一個一陣列物件都是相同的了。正確的解決辦法就是把a陣列物件的宣告放在for迴圈裡面,如下:[ [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9], [0,1,2,3,4,5,6,7,8,9], ]
var b = new Array();
for(i = 0; i < 10; i++) {
var a = new Array();
a.push(i);
b.push(a);
}
console.log(b);
輸出的結果則是:
[ [0], [1], [2], [3], [4], [5], [6], [7], [8], [9], ]