【问题标题】:JavaScript object pushed into an array [duplicate]JavaScript对象推入数组[重复]
【发布时间】:2013-01-07 12:44:54
【问题描述】:

可能重复:
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";

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

【问题讨论】:

标签: javascript


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-08-29
        • 1970-01-01
        • 2011-02-13
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 2021-05-06
        • 1970-01-01
        相关资源
        最近更新 更多