将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两次。

链接地址: http://www.djcxy.com/p/24759.html

上一篇: JavaScript object pushed into an array

下一篇: How to clone a javascript ES6 class instance