javascript中二维数组的初始化与赋值 var数组=[]; var-arr=[]; var i; 对于(i=0;i

javascript中二维数组的初始化与赋值 var数组=[]; var-arr=[]; var i; 对于(i=0;i,javascript,Javascript,上面的javascript代码给出[1,2]作为输出。 其中,使用“new Array()”而不是“push([])”给出[1]。 我能够找到问题,但我不知道为什么。有人能解释一下吗?这段代码将创建一个数组,并在arrray和arr中引用它 var array = []; var arr = []; var i; for (i = 0; i < 2; i++) { var temp = [];// using array[i] = new Array() works fine

上面的javascript代码给出[1,2]作为输出。 其中,使用“new Array()”而不是“push([])”给出[1]。
我能够找到问题,但我不知道为什么。有人能解释一下吗?

这段代码将创建一个数组,并在arrray和arr中引用它

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]);
所以当你跑步时:

var temp = [];// using array[i] = new Array() works fine
array.push(temp);
arr.push(temp);
然后,首先将1推送到原始tmp,该tmp在数组[0]中有引用,然后再次将2推送到tmp,该tmp也在arr[0]中,因此将得到[1,2]

我没有看到完整的替代代码,但我假设如果您的for循环中有以下代码:

array[0].push(1);
arr[0].push(2);
alert(array[0]);
然后,在array和arr中会有两个单独的数组,因此当再次运行时:

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

您将在数组[0]中得到1,在数组[1]中得到2。

数组的工作方式类似于指向内存中某个位置的指针,因此arr变量dosent存储您正在推送的实际值 事实上,它指向存储值的内存位置 在这种情况下,它指向“temp” 所以当你写作的时候

array[0].push(1);
arr[0].push(2);
alert(array[0]);
alert(arr[0]);
(i=0;i<2;i++)的
{
var temp=[];//使用数组[i]=new array()可以正常工作
数组推送(temp);
arr.push(温度);
}
所发生的事情是,在每个循环中,它创建了一个新的temp,但同时创建了“array和arr” 都指向内存中的同一位置,因此当其中一个正在对该位置的内容进行调制时,它会更改另一个所指向的数据

同时,如果使用以下代码

for (i = 0; i < 2; i++) {
  var temp = [];// using array[i] = new Array() works fine
  array.push(temp);
  arr.push(temp);
}
var数组=[];
var-arr=[];
var i;
对于(i=0;i<2;i++){
数组[i]=新数组();
arr[i]=新数组();
}
数组[0]。推送(1);
arr[0]。推送(2);
警报(数组[0])
这里出现的情况是,每次调用“new Array()”时,它都会在内存中分配一个新变量,并将其位置传递回您创建的数组指针“Array&arr”
因此,现在每一个previos指针都指向内存中的不同位置

首先,您必须解释您想要执行的操作。您可以写下您得到的操作,但也可以告诉我们您希望作为输出得到什么吗?
array[0]
arr[0]
引用同一个数组。我不知道它会把temp的引用放到数组中。
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])