javascript - JavaScript 在内部如何迭代对象键?

标签 javascript object iterator hashmap v8

在 JavaScript 中,当我们使用 for...in 循环或 Object.keys() 方法时,内部引擎如何迭代对象键?

我知道这可能会因一种实现而异,但我确信有一种通用方法,您能否提供一个概览?

谢谢!

最佳答案

它不是关于 object.keys 如何工作,而是更多关于如何表示对象的属性。在 V8 中,存在对象内属性(与 C 结构体字段或 Java 对象字段的表示相同)、存储在固定数组中的固定对象外属性以及存储在哈希表中的动态对象外属性。

对象内属性和固定的对象外属性的布局分别存储在对象的隐藏类中。如果对象的布局发生变化,它将获得一个新的隐藏类。就像Java's Class object ,隐藏类对象包含固定属性的名称,您只需迭代该数组即可。

当使用哈希表(又名字典、 HashMap 或规范化对象)表示时,您必须动态迭代哈希表键,就像迭代任何哈希表一样。

关于javascript - JavaScript 在内部如何迭代对象键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28646533/

相关文章:

javascript - 根据链接点击更改 div 内容

javascript - 数据未显示在创建的指令中

javascript - Ajax 加载程序图像不工作

Java - 根据对象的值对对象列表进行排序

python - 迭代器协议(protocol)。是黑魔法吗?

rust - 使用函数样式(flat_map等)实现递归迭代器的麻烦,该函数样式可处理错误并产生Result <…>类型的项

javascript - 如何动态查找 div 的 ID 或类?

php - 在第 317 行获取 fatal error : Using $this when not in object context in Stemmer. php

javascript - 为什么 Array.indexOf 找不到相同的对象

java - HashMap 的迭代器是快速失败而 HashTable 的枚举器不是?