将JavaScript对象推入数组中
可能重复:
我如何正确克隆一个JavaScript对象?
我有这样的代码:
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";
为什么会发生这种情况,以及我如何能够得到我期待的结果?
JavaScript数组持有对象的引用,而不是对象本身。 当你把一个对象放入数组它不会创建一个新的对象,但它只是把一个参考对象,即obj
还指出,进入阵列。
所以最后obj,temp [0]和temp1都指向同一个对象。 要实际创建一个全新的对象,可以使用Object.create()或jQuery.extend({},obj)。 虽然在你的情况下,使用var newobj = {name="2"}
创建一个新的简单对象已经很简单了
JavaScript对象通过引用传递。 在你的情况下,你只有一个对象“obj”,而temp [0]和temp [1]指向同一个对象。
obj
是一个对象在数组中添加引用,所以你实际上添加了相同的obj
两次。