18

可能重复:
如何正确克隆 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";

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

4

3 回答 3

9

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

所以最终obj、temp[0]和temp 1都指向同一个对象。要真正创建一个全新的对象,您可以使用Object.create()或 jQuery.extend({},obj)。尽管在您的情况下,只需使用创建一个新的简单对象就很容易了var newobj = {name="2"}

于 2013-01-23T21:46:29.327 回答
4

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

于 2013-01-23T21:42:19.047 回答
0

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

于 2013-01-23T21:44:31.357 回答