gpt4 book ai didi

javascript - 在Javascript中,如何区分使用实际数据保存的对象和作为引用保存的对象?

转载 作者:行者123 更新时间:2023-11-28 15:27:19 25 4
gpt4 key购买 nike

假设我有一个对象 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)?

最佳答案

ObjR 并不完全是一个对象,它是一个名称,其值是一个对象。该值恰好与名称 mainObj 的值相同。有问题的值为 {x: 1}。在程序中的任何位置,编写 mainObjObjR 在语义上与编写 {x: 1} 相同。前者是名字;后者是一个字面对象。没有办法区分这两者;其实这个问题有点没有意义。

并非某些对象“用实际数据保存”而另一些对象“另存为引用”。对象本身只是一个对象,包含该对象的实际数据。名称不是一个对象,而是可以被认为是一种指向实际对象的指针。名称永远不会指向其他名称;它们指向值(value)观。

ObjR = mainObj; 并不意味着“设置 ObjR 来引用 mainObj”。它的意思是“将ObjR的值设置为mainObj的当前值”。 ObjR 与变量 mainObj 没有任何关系。

可能会引起困惑,因为在正常对话中我们确实会说“对象 ObjR”之类的内容。您需要记住,这是“名为 ObjR 的变量引用的对象”的一种简写。

考虑一个更简单的数字示例:

a = 1;
b = a;

现在,我可以区分 ab 吗?不。我为什么要这么做?

关于javascript - 在Javascript中,如何区分使用实际数据保存的对象和作为引用保存的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28577667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com