在 JS 内存中,对象是以块的形式存储的吗?

In JS memory are objects stored as a block?

我想知道是否有对象,例如

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

作为一个组存储在内存中,以便变量 'numbers' 在一个地方引用整个对象,或者如果它的每个单独的键都作为单独的项目存储在不同的地方,这些项目全部由许多单独的指针不知何故?谢谢

(此处为 V8 开发人员。)

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

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