2013-07-13 26 views
2
var array = []; 
var arr = []; 
var i; 
for (i = 0; i < 2; i++) { 
    var temp = [];// using array[i] = new Array() works fine 
    array.push(temp); 
    arr.push(temp); 
} 
array[0].push(1); 
arr[0].push(2); 
alert(array[0]); 

上面的javascript代码给出了[1,2]。 使用'新阵列()'而不是'push([])'给出[1]。 我能找到问题,但我不明白为什么。可有一个人解释这JavaScript中的2D数组的初始化和赋值

+0

首先你必须解释你想要执行什么。 – MaxArt

+0

你写下你得到的结果,但是你能告诉我们你期望得到的结果是什么吗? – Sumurai8

+1

'array [0]'和'arr [0]'指的是同一个数组。 –

回答

1

此代码将创建一个数组,并把参考这里面既arrray和常用3

var temp = [];// using array[i] = new Array() works fine 
array.push(temp); 
arr.push(temp); 

所以,当你运行:

array[0].push(1); 
arr[0].push(2); 
alert(array[0]); 

然后,你先推1到原始tmp,它在数组[0]中有引用,然后再次将2 push到tmp,这在arr [0]中也是如此,因此您将得到[1,2]。

我没看到完整的替代代码,但我认为,如果你有这样的在你的for循环:

array[i] = new Array(); 
arr[i] = new Array(); 

然后,你就必须在阵列中的两个独立的阵列和改编,所以当你运行再次:

array[0].push(1); 
arr[0].push(2); 
alert(array[0]); 
alert(arr[0]); 

你会在数组[1]中得到1和在数组[1]中得到2。

+0

thanx。我不知道它会将参考引用到数组中。 – Naruto

2

阵列工作像指针在存储器中的某个位置,以便所述ARR变量dosent商店u的推 实际值实际上它指向其中的值被存储 并且在这种情况下,它指向的存储器位置“TEMP” 所以,当你写

for (i = 0; i < 2; i++) { 
    var temp = [];// using array[i] = new Array() works fine 
    array.push(temp); 
    arr.push(temp); 
} 

正在发生的事情是,在每个循环它创建一个新的临时但两者“阵列的ARR” 都指向同一个位置,在内存中,所以当一个他们正在模拟这个位置的内容,改变另一个指向的数据。

同时,如果使用下面的代码

var array = []; 
var arr = []; 
var i; 
for (i = 0; i < 2; i++) { 
    array[i] = new Array(); 
    arr[i] = new Array(); 

} 
array[0].push(1); 
arr[0].push(2); 
alert(array[0]) 

究竟会hapen这里是每一个“新的Array()”被调用的时候它会在内存中分配一个新的变量和回传的位置到你创建的数组指针“array & arr” 所以现在每个previos指针都指向内存中的不同位置