对象内的 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" },all: []
}

if (!_.isEmpty(myObject.primary)) {
    myObject.all.push(myObject.primary)
}
myObject.all.push(...myObject.secundary) // spread = shallow copy

我现在不确定的是,这个对象的内存使用量是否不会因为添加引用而增加。我的常识逻辑告诉我应该没有必要,但我担心浏览器或 VM 中是否有垃圾收集器、代码优化器、序列化器或其他任何东西,这可能仍然会导致为“重复”对象分配内存。

所以问题可以提出:

问。对象中引用其他对象的对象是否仍然占用内存(引用“指针”本身除外)。

附带说明:我执行主要对象的推送,然后是次要对象的传播,因此主要对象仍将是结果数组中的第一个对象,在我的场景中,主要对象也可能只是一个空对象。

解决方法

即使你散布元素,你也不会在第二级深度克隆元素。那里没有重复的元素。你可以试试这个小小的简化,看看:

let a = { a: 1,b: 2 };
let b = [ {a: 3},{a : 2} ];

let c = [];

c.push(...b);

console.log( c[0] === b[0] ); // true