javascript - 对象内的 Javascript 引用快捷方式(它们是否占用空间?)
问题描述
我有一个具有非常大的属性的 javascript 对象(想象一下“大型对象 X”是复杂且大型的 javascript 对象):
let myObject = {
primary: { "large-object A" },
secundary: [ {"large-object B"}, {"large-object C"}, {"large-object D"} ],
}
在某些情况下,我只需要拥有myObject.primary
,但有时我不关心主要/次要区别,我想遍历所有对象。现在,我做了一些测试,我似乎能够创建一个新属性,我称之为“ all
”,它可以通过引用指向主要和次要中的所有对象:
let myObject = {
primary: { "large-object A" },
secundary: [ {"large-object B"}, {"large-object C"}, {"large-object D"} ],
all: []
}
if (!_.isEmpty(myObject.primary)) {
myObject.all.push(myObject.primary)
}
myObject.all.push(...myObject.secundary) // spread = shallow copy
我现在不确定的是这个对象的内存使用量是否没有通过添加引用而增加。我的常识逻辑告诉我应该没有必要,但我担心浏览器或虚拟机中是否存在垃圾收集器、代码优化器、序列化器或其他任何东西,这可能仍会导致为“重复”对象分配内存。
所以这个问题可以提出如下:
问:对象中引用其他对象的对象是否仍然占用内存(除了引用“指针”本身)。
附带说明:我先推送主要对象,然后传播次要对象,以便主要对象仍然是结果数组中的第一个,在我的场景中,主要对象也可能只是一个空对象。
解决方案
即使您传播元素,您也不会在第二层中深度克隆元素。那里没有重复的元素。你可以试试这个小小的简化,看看:
let a = { a: 1, b: 2 };
let b = [ {a: 3}, {a : 2} ];
let c = [];
c.push(...b);
console.log( c[0] === b[0] ); // true
推荐阅读
- swift - Firestore 批处理集仅插入最后一项
- ios - Swift 如何根据单击的工具栏按钮将用户引导到不同的视图控制器
- mysql - 以写列的顺序排序
- opendj - 无法将属性添加到 OpenDJ LDAP 中的条目
- itext - PDFA 文档缺少注释和标记
- amazon-web-services - 如何限制用户使用 IAM 从亚马逊 S3 下载数据?
- sql - 需要 sql 查询来匹配三个值
- javascript - Photoshop 脚本数组到 json
- angular - Angular中伊斯坦布尔覆盖报告中的标记异常
- android-8.0-oreo - 如何取消 GoogleAuthUtil#requestGoogleAccountsAccess() 执行的操作?