【问题标题】:Internally how does JavaScript iterate over object keys?JavaScript 在内部如何迭代对象键?
【发布时间】:2015-02-21 13:48:02
【问题描述】:

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

我知道从一种实现到另一种实现可能会略有不同,但我确信有一个通用的方法,你能提供一个鸟瞰图吗?

谢谢!

【问题讨论】:

  • “如何”是什么意思?你是问订单吗?我认为“如何”将完全依赖于实现,而不是 JS 程序中非常有用的信息。
  • 我不是指订单,我是指它是如何完成的。知道是否有用,这是个人意见:让我们坚持这个问题。
  • 您是指每个浏览器的实现以及它们如何解释 javascript 代码,还是您想要 ECMA 规范之类的东西?像这样的东西? people.mozilla.org/~jorendorff/…
  • 这不是意见。如果需要迭代,则需要迭代。实施细节无关紧要。如果您打算比较 for-inObject.keys() + for,那会有些不同,但实现细节仍然无关紧要。重要的是列出您的担忧并比较两者。
  • @DuKes0mE,我的意思是概述它是如何在概念上完成的,用外行的话。

标签: javascript object iterator hashmap v8


【解决方案1】:

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

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

当使用哈希表(也称为字典、哈希图或规范化对象)表示时,您必须像遍历任何哈希表一样动态地遍历哈希表键。

【讨论】:

    猜你喜欢
    • 2018-04-06
    • 2020-06-29
    • 2011-07-22
    • 2012-06-18
    • 2021-12-20
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多