先来看下面的JavaScript 代码,看看会得到什么结果:
var a = new Array();
var b = new Array();
for(i = 0; i < 10; i++) {
a.push(i);
b.push(a);
}
console.log(b);
执行上述代码后,控制台输出的是一个二维数组,如下:
[
[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],
]
因为在上述代码 b.push(a)中,b数组中的每一个一维数组存放的都是a的引用,当数组a改变,b数组中的每个一维数组也跟着改变。整个for循环执行完之后,b数组里面的每一个一数组对象都是相同的了。正确的解决办法就是把a数组对象的声明放在for循环里面,如下:
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],
]