JavaScript对象被推入数组

JavaScript object pushed into an array

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do I correctly clone a JavaScript object?

我有这个代码:

1
2
3
4
5
var temp = [];
var obj = {name:"1"};
temp.push(obj);
obj.name ="2";
temp.push(obj);

我所期望的是真实的:

1
temp[0].name =="1" && temp[1].name =="2";

实际发生的情况:

1
temp[0].name =="2" && temp[1].name =="2";

为什么会发生这种情况,我怎么能得到我所期待的?


JavaScript数组保存对对象的引用,而不是对象本身。当您将一个对象推送到数组中时,它不会创建一个新的对象,但只会将对该对象的引用(obj也指向该对象)放到数组中。

所以在最后的obj中,temp[0]和temp1都指向同一个对象。要实际创建一个全新的对象,可以使用object.create()或jquery.extend(,obj)。不过,在您的例子中,只需使用var newobj = {name="2"}创建一个新的简单对象就足够简单了。


javascript对象是通过引用传递的。在您的例子中,只有一个对象"obj",temp[0]和temp[1]指向同一个对象。


作为对象的obj是通过引用添加到数组中的,因此实际添加相同的obj两次。