javascript 对象添加到数组的疑问

数组的长度改变了。。
但是,里面的每个对象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]})
}
第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

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网