引擎盖下,是JavaScript对象哈希表?(Under the hood, are Javascr

2019-06-23 19:38发布

我想知道对象是如何在JavaScript引擎(V8,SpiderMonkey的,等等)的引擎盖下实现的。 难道他们真的只是哈希表? 如果是这样,他们如何处理冲突?

Answer 1:

首先,答案很可能是不同的JS引擎有所不同。 另外,我假设你具体问的是财产保管; 显然对象具有一堆其他状态太(原型链链路是一个明显的例子)。

在SpiderMonkey的情况下,对象主要有(PROPNAME,关于属性信息)对一个链表,直到他们有太多的特性,当我相信他们仍然保持链表(因为顺序问题在实践中的JS性能),但添加了带外的哈希表的属性名称映射到链接列表条目。

也可能有其它原因切换到散列表; 在细节不完全得到修复一段时间,并有可能在今后可能会改变。

该链表和哈希表中所有物体实际上是共享; 只要两个对象具有相同的属性名称和相应的属性信息(不包括价值,对于具有储值性质),并以相同的顺序进行设置的属性,他们能够共享属性链表。

的实际属性值,当那些需要被存储,被存储在该对象的阵列(或者更精确地,两个阵列;一个与所述对象的大小被固定为对象创建时间内联分配一个动态分配和调整大小根据需要性质以后添加)。



Answer 2:

是的,他们是哈希表。 我不明白,虽然你的冲撞部,请解释一下你的问题的第二部分



文章来源: Under the hood, are Javascript objects hash tables?