JavaScript对象被推入数组

时间:2013-01-23 21:37:46

标签: javascript

  

可能重复:
  How do I correctly clone a JavaScript object?

我有这段代码:

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

我期待的是真实的:

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

实际发生的事情:

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

为什么会发生这种情况,以及我如何能够得到我期待的东西?

3 个答案:

答案 0 :(得分:8)

JavaScript数组包含对象的引用,而不是对象本身。将对象推入数组时,它不会创建新对象,但它只是将对象obj指向的对象引用到数组中。

所以最后obj,temp [0]和temp 1都指向同一个对象。要实际创建一个全新的对象,可以使用Object.create()或jQuery.extend({},obj)。虽然在您的情况下,使用var newobj = {name="2"}

创建一个新的简单对象很简单

答案 1 :(得分:4)

JavaScript对象通过引用传递。在您的情况下,您只有一个对象“obj”,而temp [0]和temp [1]指向同一个对象。

答案 2 :(得分:0)

作为对象的

obj在数组中通过引用添加,因此您实际添加了相同的obj两次。