数组的长度改变了。。
但是,里面的每个对象a属性都是3?为什么?
var ar = [1,2,3]
var ar2 = [11,22,33]
var obj = { a : 0, b : 0 }
var myar = [];
for(var i = 0; i < 3; i ++)
{
obj.a = ar[i];
obj.b = ar2[i];
myar.push(obj)
}
alert(myar[0].a);
javascript中,一切都是对象,传递的时候,也是传递一个引用,相当于一个地址,obj本身始终
在那里,而且他的值已经被改成3,33,这个是你的for循环造成的
myar虽然每次都push进去一个obj,但是只是obj的一个引用,最终找到obj的时候,还是3,33
具体请看图
温馨提示:答案为网友推荐,仅供参考
第1个回答 2012-05-30
因为里面每个对象都是obj这个对象,你不了解对象是引用的?
for(var i = 0; i < 3; i ++)
{
obj.a = ar[i];
obj.b = ar2[i];
myar.push({a:ar[i] ,b:ar2[i]})
}
for(var i = 0; i < 3; i ++)
{
obj.a = ar[i];
obj.b = ar2[i];
myar.push({a:ar[i] ,b:ar2[i]})
}
第2个回答 2012-05-30
for(var i = 0; i < 3; i ++)
{
obj.a = ar[i];
obj.b = ar2[i];
myar.push(obj)
}
你的这个代码是:当i=0时,obj.a = 1;再把这个obj给myar,但是当i=1时,obj.a = 2;此时,虽然myar[0]是obj.a,但是,你不是改了obj.a 的值了吗(obj.a = 2),也就是,myar[0]里面的那个obj.a也改了呀。也就是说,myar里面的值都是obj,最后,你的obj.a= ar[2];,所有的obj.a都会变的,obj.b 也是一样,所以到最后,里面的每个对象(其实不是每个对象,你半天就弄了一个对象呀,只不过是重复赋值)a属性都是3
{
obj.a = ar[i];
obj.b = ar2[i];
myar.push(obj)
}
你的这个代码是:当i=0时,obj.a = 1;再把这个obj给myar,但是当i=1时,obj.a = 2;此时,虽然myar[0]是obj.a,但是,你不是改了obj.a 的值了吗(obj.a = 2),也就是,myar[0]里面的那个obj.a也改了呀。也就是说,myar里面的值都是obj,最后,你的obj.a= ar[2];,所有的obj.a都会变的,obj.b 也是一样,所以到最后,里面的每个对象(其实不是每个对象,你半天就弄了一个对象呀,只不过是重复赋值)a属性都是3