javascriptv8引擎中的Map.get(obj)是如何实现对象查找的?

How is object lookup implemented by Map.get(obj) in the javascript v8 engine?

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

想深入挖掘。

简答:(有一个小更新:四年后,随机“哈希”存储在对象上的精确方式确实得到了改进;原理保持不变)。

长答案:正如 Bergi 所建议的,请阅读源代码。请注意,细节可能随时更改(这就是为什么没有大量关于 current 实现的文档的原因之一)。