javascript - 在 JS 内存中,对象是否存储为块?
问题描述
我想知道如果一个对象,例如
const numbers = {
a: 1,
b: 2,
c: 3
};
作为一个组存储在内存中,以便变量“数字”在一个地方引用整个对象,或者如果它的每个单独的键作为单独的项目存储在不同的地方,这些项目都以某种方式通过许多单独的指针连接?谢谢。
解决方案
(这里是 V8 开发人员。)
简短的回答是:是的,至少在这种简单的情况下这是一个合理的假设。
更长的答案是它很复杂,而且完全是引擎内部的细节:不同的 JS 引擎和它们的不同版本,很可能会选择在内部以不同的方式表示(大的、复杂的)对象。例如,V8 分别存储“命名”和“索引”对象属性,例如,如果您有numbers = {a: 111, b: 222, 0: 42, 1: 43}
,那么42
and43
将被存储在远离 where111
和222
are 的地方。另一个例子是嵌套对象,可以肯定的是,“内部”对象将是一个单独的内存块,例如在 中foo = {a: 1, b: 2, nested: {inner: 1, object: 2}}
,foo
对象将具有指向该nested
对象的指针。同时,numbers
你的例子中的变量显然必须指向内存中的某个东西,所以有'对象;只是该对象的某些部分可能与那里有间接关系。
推荐阅读
- docker - 如何在 AWS Amplify 中使用自定义构建映像?
- r - 为什么在函数内部时带有字符串向量的 group_by_at() 会失败?
- r - 在r中以tidyverse方式从列表列到数据框
- mongodb - 我怎样才能做这样的查询过滤器?
- python - Python 协程不与 time.sleep() 同时运行?
- java - Lambda 表达式中的模式匹配
- bash - bash脚本中的while循环从文件中读取时删除第一行
- android - 尽管用户为 Null,但应用程序卸载和重新安装显示“不允许 Firebase 身份验证”。我们可以注销或删除用户或登录吗?
- ios - 如何快速判断设备屏幕何时锁定或解锁
- filter - 如何将自定义键值对添加到 grok 模式?