我有这段代码:
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";
为什么会发生这种情况,以及我如何能够得到我期待的东西?
答案 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
两次。