真的很奇怪,我正在修改其中一个阵列而另一个正在修改!除了键入数组两次之外,我发现无法使其工作。我该怎么办?
function test(a,b,c,d)
{
this.a=a;
this.b=b;
this.c=c;
this.d=d;
}
var data0=data=[[1,2,3,4],[5,6,7,8]];
function construct(constructor,args)
{
function F(){return constructor.apply(this,args);}
F.prototype=constructor.prototype;
return new F();
}
for(var i=0,l=data.length;i<l;i++)
{
data[i]=construct(test,data[i]);
}
console.log(data0);
答案 0 :(得分:2)
您正在引用相同的项目:
var data0=data=[[1,2,3,4],[5,6,7,8]];
(作为旁注 - 这里data
最终在全局对象上,因为它没有真正声明,只有data0
是)
如果要生成两个具有相同项目的不同数组,可以执行以下操作:
var data0 =[[1,2,3,4],[5,6,7,8]];
var data = [];
data = data.concat(data0);
或
data = data0.slice(0);
答案 1 :(得分:1)
JavaScript不会在data0=data
赋值时复制数组,而是将两个变量都指向内存中的同一个对象。您需要完全克隆数组,例如:
var data0 = data.slice(0);