JavaScript如何在内部迭代对象键

Internally how does JavaScript iterate over object keys?

本文关键字:对象 迭代 在内部 JavaScript      更新时间:2024-03-22

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

我知道从一个实现到另一个实现,这可能会略有变化,但我相信有一个通用的方法,你能概括一下吗?

谢谢!

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

对象内属性和固定的对象外属性的布局分别存储在对象的隐藏类中。如果对象的布局发生更改,它将获得一个新的隐藏类。与Java的Class对象一样,隐藏类对象包含固定属性的名称,您只需对该数组进行迭代。

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