在JavaScript中,当我们使用for...in
循环或Object.keys()
方法时,内部引擎如何迭代对象键?
我知道这可能会从一个实现到另一个实施略有变化,但我确定这是一个通用的方法,你能给出一只鸟的概述吗?
谢谢!
答案 0 :(得分:1)
它不是关于object.keys的工作方式,而是关于如何表示对象属性的更多信息。在V8中,存在对象内属性(与C结构字段或Java对象字段表示相同),固定存储在固定数组中的对象外属性以及存储在哈希表中的动态对象外属性。
对象内属性的布局和固定的对象外属性分别存储在对象的隐藏类中。如果对象的布局发生变化,它将获得一个新的隐藏类。与Java's Class object类似,隐藏的类对象包含固定属性的名称,您只需遍历该数组。
当使用散列表(也就是字典,散列映射或规范化对象)表示时,您必须动态迭代散列表键,就像迭代任何散列表一样。