Javascript 如何在使两个变量名成为同一对象的别名与使它们等于两个独立对象之间进行切换?

Javascript 如何在使两个变量名成为同一对象的别名与使它们等于两个独立对象之间进行切换?,javascript,jquery,object,extend,javascript-objects,Javascript,Jquery,Object,Extend,Javascript Objects,我有两个对象,obj1和obj2。当用户单击按钮时,我希望其中一个具有与另一个相同的属性和值,因此我写这行: main.obj1.data=$.extend({},main.someArray[0].data); 但是现在更新main.obj1.data会自动更新main.someArray[0].data,反之亦然。我通过在代码行之后立即使用console.logs检查这一点来测试它。我认为这个命令会克隆对象,但不会使它们成为同一对象的别名。我做错了什么 在执行此命令之前,我需要对混乱的代码

我有两个对象,obj1和obj2。当用户单击按钮时,我希望其中一个具有与另一个相同的属性和值,因此我写这行:

main.obj1.data=$.extend({},main.someArray[0].data);
但是现在更新
main.obj1.data
会自动更新
main.someArray[0].data
,反之亦然。我通过在代码行之后立即使用console.logs检查这一点来测试它。我认为这个命令会克隆对象,但不会使它们成为同一对象的别名。我做错了什么


在执行此命令之前,我需要对混乱的代码进行排序…在该点之前,我是否在代码中添加了任何可能导致$.extend不再像我认为的那样工作的内容?

有两种方法可以解决此问题

1. 
main.obj1.data={};
$.extend(main.obj1.data,main.someArray[0].data);

2.
main.obj1.data=$.extend(true,{},main.someArray[0].data)
实际上,两者都在做同样的事情
您可以阅读有关jQuery扩展复制值的更多信息,以便复制的对象不应链接到初始对象。您可以在这个JSFIDLE中验证:(打开控制台并运行脚本)

$.extend(true,{},main.someArray[0].data)
中的第一个参数用于深度复制对象。如果对象具有多个级别,请使用此参数,否则不需要此参数


我猜,但是否有可能您的扩展代码位于每次更新其中一个值时都会调用的绑定对象上?

是否指导分配工作?像obj1=obj2use$.extend(true,{},obj)@Huangism一样,由于对象引用,该问题无法通过直接赋值来解决。