考虑我有一个对象mainObj,我复制了这个对象并保存了两个其他变量ObjD和ObjR。
mainObj = {x:1};
ObjR = mainObj;
ObjD = {};
mainAbjArray = Object.keys(mainObj);
for(i=0;i<mainAbjArray.length;i++){
ObjD[mainAbjArray[i]] = mainObj[mainAbjArray[i]];
}
在执行上面之后,我在访问时有两个对象提供了理智的数据,但存储方式不同。那么,如何确定一个对象是作为参考(如ObjR)保存并保存在实际数据中(如ObjD)?
答案 0 :(得分:2)
ObjR
不是一个对象,它是一个名称,其值是一个对象。该值恰好与名称mainObj
的值相同。相关值为{x: 1}
。在您的计划中的任何地方,写mainObj
或ObjR
在语义上与编写{x: 1}
相同。前者是名字;后者是一个文字对象。没有办法区分这两者;事实上,这个问题有点无意义。
某些对象不是“用实际数据保存”而其他对象“保存为参考”。对象本身只是一个对象,包含该对象的实际数据。名称不是对象,而是可以被认为是指向实际对象的一种指针。名字从不指向其他名称;他们指向价值观。
ObjR = mainObj;
并不意味着“设置ObjR
来引用mainObj
”。这意味着“将ObjR
的值设置为mainObj
的当前值”。 ObjR
与变量mainObj
没有任何联系。
可能会出现混乱,因为在正常的对话中我们会说“对象ObjR
”之类的内容。你需要记住,这是一种说法“名为ObjR
的变量引用的对象的简写。”
考虑一个带数字的简单例子:
a = 1;
b = a;
现在,我可以区分a
和b
吗?不,我为什么要这样做?
答案 1 :(得分:2)
你不能。对象始终保存为参考。
您可以复制它们。 mainObj
和ObjR
包含相同的值。没有办法区分它们。
ObjD
只是另一个通过复制所有值而使您完全相同的对象的引用。
您可以区分具有==
的两个对象,因为它们是不同的对象,但您无法告诉对象是如何创建的,或者是如何填充变量。