Javascript 在JS内存中,对象是否存储为块?

Javascript 在JS内存中,对象是否存储为块?,javascript,object,memory,v8,Javascript,Object,Memory,V8,我想知道是否有一个物体 const numbers = { a: 1, b: 2, c: 3 }; 作为一个组存储在内存中,以便变量“numbers”在一个位置引用整个对象,或者如果它的每个单独的键作为单独的项存储在不同的位置,这些项都以某种方式由许多单独的指针连接?谢谢。(这里是V8开发者。) 简单的回答是:是的,至少在这样简单的情况下,这是一个合理的假设 较长的答案是,这很复杂,而且完全是一个引擎内部细节:不同的JS引擎及其不同版本可能会选择在内部以不同

我想知道是否有一个物体

const numbers = {
      a: 1,
      b: 2,
      c: 3
};
作为一个组存储在内存中,以便变量“numbers”在一个位置引用整个对象,或者如果它的每个单独的键作为单独的项存储在不同的位置,这些项都以某种方式由许多单独的指针连接?谢谢。

(这里是V8开发者。)

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


较长的答案是,这很复杂,而且完全是一个引擎内部细节:不同的JS引擎及其不同版本可能会选择在内部以不同的方式表示(大型、复杂)对象。例如,V8分别存储“命名”和“索引”对象属性,例如,如果您有
number={a:111、b:222、0:42、1:43}
,则
42
43
将存储在
111
222
所在的位置之外。另一个例子是嵌套对象,其中“内部”对象肯定是一个单独的内存块,例如在
foo={a:1,b:2,嵌套:{inner:1,object:2}
中,
foo
对象将有一个指向
嵌套对象的指针。同时,示例中的
numbers
变量显然必须指向内存中的某个对象,因此始终有一个表示对象的内存地址;只是该对象的某些部分可能是间接的。

有时,根据您的知识水平,阅读详细的规格并不总是有助于获得易于理解的答案。谢谢,我认为嵌套对象可能会有自己的空间,但也认为将所有对象分组在一个位置可能会带来性能优势,所以可能总是一个大组。