首页 > 解决方案 > 在 JS 内存中,对象是否存储为块?

问题描述

我想知道如果一个对象,例如

const numbers = {
      a: 1,
      b: 2,
      c: 3
};

作为一个组存储在内存中,以便变量“数字”在一个地方引用整个对象,或者如果它的每个单独的键作为单独的项目存储在不同的地方,这些项目都以某种方式通过许多单独的指针连接?谢谢。

标签: javascriptobjectmemoryv8

解决方案


(这里是 V8 开发人员。)

简短的回答是:是的,至少在这种简单的情况下这是一个合理的假设。

更长的答案是它很复杂,而且完全是引擎内部的细节:不同的 JS 引擎和它们的不同版本,很可能会选择在内部以不同的方式表示(大的、复杂的)对象。例如,V8 分别存储“命名”和“索引”对象属性,例如,如果您有numbers = {a: 111, b: 222, 0: 42, 1: 43},那么42and43将被存储在远离 where111222are 的地方。另一个例子是嵌套对象,可以肯定的是,“内部”对象将是一个单独的内存块,例如在 中foo = {a: 1, b: 2, nested: {inner: 1, object: 2}}foo对象将具有指向该nested对象的指针。同时,numbers你的例子中的变量显然必须指向内存中的某个东西,所以有'对象;只是该对象的某些部分可能与那里有间接关系。


推荐阅读