JavaScript对象推入数组[重复]

Posted

技术标签:

【中文标题】JavaScript对象推入数组[重复]【英文标题】:JavaScript object pushed into an array [duplicate] 【发布时间】: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";

为什么会发生这种情况,我如何才能得到预期的结果?

【问题讨论】:

...这是***.com/questions/14417645/javascript-object-cloning/…的解决方案 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于JavaScript对象推入数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript Nodejs值未推入数组[重复]

Javascript将对象推入数组

将对象推入javascript深拷贝还是浅拷贝中的数组?

javascript 对象被推入数组作为参考

将对象推入数组中,而无需在 javascript 中使用键

如何将父对象迭代到子对象并推入数组javascript(vuejs)