在JavaScript中,对象如何跟踪键/值插入顺序?

时间:2015-02-21 16:26:27

标签: javascript object v8

看看here

  

事实上的标准是匹配广告订单

这是如何在发动机内部实现的? (为简单起见,请说v8)

1 个答案:

答案 0 :(得分:1)

Mozilla人在Anatomy of a JavaScript Object上做了一篇很棒的博客文章。简而言之(如果链接停止工作),Firefox使用三种数据结构来跟踪对象的属性。

第一个是对象的值数组。存储在属性中的任何内容都会添加到此数组中。由于它是一个数组,因此每次添加元素时,JavaScript引擎都不会从堆中分配少量内存。这种方式越快越好不会破坏RAM。

第二个是对象的“对象映射”,它将键映射到JSScopeProperty对象。 因为地图是一个链接列表,最近添加的属性位于头部,所以JavaScript引擎可以从头到尾遍历列表并按插入顺序获取所有属性

JSScopeProperty对象记住数组中属性值的索引,以及与属性相关的其他元数据。这就是JavaScript如何将属性名称链接到它们的值。

拥有两个独立的数据结构可以节省动态内存分配(这会降低性能),并通过将多个JSScopeProperty实例指向内存中的相同值,甚至重新使用整个对象映射,为JavaScript引擎提供节省内存的机会两个对象具有相同的属性。