JavaScript Map 和哈希表

2 javascript hashtable

我想这个问题以前没有问过。这是关于 Javascript Map:

var myMap = new Map();
Run Code Online (Sandbox Code Playgroud)

Javascript Map 和哈希表之间的关系是什么?Map 是哈希表的实现吗?

T.J*_*der 9

规范

Map 对象必须使用哈希表或其他机制来实现,平均而言,这些机制提供的访问时间与集合中的元素数量呈次线性关系。

因此,这取决于 JavaScript 引擎¹的实现,但它的实现方式必须能够提供与使用哈希表相同的好处,因此使用哈希表将是实现采用的明智方法。该规范特别禁止实现Map查找条目涉及对元素的线性搜索。


¹ 规范说明了Map对象必须如何表现。JavaScript 引擎(Chrome 和 Chromium 和 Node.js 中的 V8,Firefox 中的 SpiderMonkey,Safari 中的 JavaScriptCore,Edge 中的 Chakra ......)实现了这种行为。他们如何做到这一点取决于他们,只要他们以与规范一致的方式进行。

  • 创建 JavaScript 引擎(例如 Google Chrome 中的 V8,或 MS Edge 中的 Chakra 等)的人用 C 或他们用来创建 JS 引擎的任何语言实现 JavaScript `Map` 行为。规范说,如果你正在制作一个新的浏览器(或一个新的无浏览器引擎),你的“地图”必须比查看每个元素并比较键更快。 (3认同)
  • 谢谢@TJCrowder!现在很清楚了。因此,当我们调用 `new Map()` 时,我们要求引擎创建一个具有 Javascript 规范中描述的行为的对象,而不管这种行为是如何生成的。Map 可以用不同类型的结构和逻辑创建,哈希表就是其中之一。 (2认同)