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对象推入数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章