0

我对 v8 的内部结构以及如何Map在引擎盖下实现感到好奇。对比一下Map,javascript 对象不能有对象作为键。据我了解,它Map以经典的哈希映射方式实现查找。一些散列函数将输入键映射到某个输出整数,该整数用作数组中的索引。然后在数组溢出时进行一些动态调整大小,并且在数组的每个 bin 中都有一些链表。可能v8的地图细节稍微复杂一些,涉及到对小Maps的一些优化?很想知道实际的实现与我上面的草图有多大不同。基于以下假设Map在引擎盖下像这样工作,它如何从普通对象映射到数组中的键?我猜它把指针地址取模到数组中?

好奇深入挖掘。

4

1 回答 1

1

简短回答:ES6 Maps and Sets:如何有效地索引对象键?(有一个小的更新:四年后,随机“哈希”存储在对象上的精确方式确实得到了改进;原理保持不变)。

长答案:正如Bergi建议的那样,阅读源代码。请注意,细节可能随时更改(这也是没有大量文档说明当前实现的原因之一)。

于 2021-05-10T09:40:17.047 回答