Javascript 对象内的引用快捷方式(它们占用 space 吗?)
Javascript reference shortcuts within object (do they take up space?)
我有一个 javascript 对象,它具有非常大的属性(假设“大对象 X”是复杂且大的 javascript 对象):
let myObject = {
primary: { "large-object A" },
secundary: [ {"large-object B"}, {"large-object C"}, {"large-object D"} ],
}
在某些情况下我只需要myObject.primary
,但有时我不关心primary/secundary的区别,我想遍历所有[=32] =] 对象。现在,我做了一些测试,我似乎可以创建一个新的 属性,我称之为“all
”,它可以 by-reference point小学和中学的所有对象:
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
我现在不确定的是这个对象的内存使用量是否不会通过添加引用而增加。我的常识逻辑告诉我应该没有必要,但我担心如果浏览器或 VM 中有垃圾收集器、代码优化器、序列化器或任何东西,它们可能仍然会导致为“重复”对象分配内存。
所以问题可以提出为:
问。对象中引用其他对象的对象是否仍然占用内存(引用 'pointer' 本身除外)。
旁注:我先推送主要对象,然后传播次要对象,这样主要对象仍将在结果数组中排在第一位,在我的场景中主要对象也可以只是一个空对象。
即使你传播元素,你也不是在第二层深度克隆元素。那里没有重复的元素。您可以尝试这个小小的简化并查看:
let a = { a: 1, b: 2 };
let b = [ {a: 3}, {a : 2} ];
let c = [];
c.push(...b);
console.log( c[0] === b[0] ); // true
我有一个 javascript 对象,它具有非常大的属性(假设“大对象 X”是复杂且大的 javascript 对象):
let myObject = {
primary: { "large-object A" },
secundary: [ {"large-object B"}, {"large-object C"}, {"large-object D"} ],
}
在某些情况下我只需要myObject.primary
,但有时我不关心primary/secundary的区别,我想遍历所有[=32] =] 对象。现在,我做了一些测试,我似乎可以创建一个新的 属性,我称之为“all
”,它可以 by-reference point小学和中学的所有对象:
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
我现在不确定的是这个对象的内存使用量是否不会通过添加引用而增加。我的常识逻辑告诉我应该没有必要,但我担心如果浏览器或 VM 中有垃圾收集器、代码优化器、序列化器或任何东西,它们可能仍然会导致为“重复”对象分配内存。
所以问题可以提出为:
问。对象中引用其他对象的对象是否仍然占用内存(引用 'pointer' 本身除外)。
旁注:我先推送主要对象,然后传播次要对象,这样主要对象仍将在结果数组中排在第一位,在我的场景中主要对象也可以只是一个空对象。
即使你传播元素,你也不是在第二层深度克隆元素。那里没有重复的元素。您可以尝试这个小小的简化并查看:
let a = { a: 1, b: 2 };
let b = [ {a: 3}, {a : 2} ];
let c = [];
c.push(...b);
console.log( c[0] === b[0] ); // true