JavaScript Map 和哈希表

8

我想这个问题之前没有被提出过。它与JavaScript Map有关:

var myMap = new Map();

Javascript中的Map和哈希表有什么关系? Map是否是哈希表的一种实现?


https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map - Deblaton Jean-Philippe
1
谢谢@DeblatonJean-Philippe,但我在你的链接中没有看到任何与问题相关的内容。 - user7499416
1个回答

14

根据规范,Map对象必须使用哈希表或其他机制实现,平均提供对集合中元素数量次线性的访问时间。

这取决于JavaScript引擎的实现方式¹,但它必须以一种提供哈希表相同优势的方式实现,因此使用哈希表是一个明智的方法。规范明确禁止实现 Map 时通过线性搜索元素来查找条目。


¹ 规范指定了Map对象的行为方式。JavaScript引擎(如Chrome和Chromium和Node.js中的V8,Firefox中的SpiderMonkey,Safari中的JavaScriptCore,Edge中的Chakra...)实现该行为。只要它们按照规范一致地执行即可。


谢谢!嗯,我现在对“实现”这个术语有点糊涂了。我以为 Map 已经是一种实现了。因此调用 Map() 就会创建一个它的实例,而无需实现任何其他东西。我错在哪里了? - user7499416
3
创建JavaScript引擎的人(例如Google Chrome中内置的V8引擎或MS Edge中的Chakra引擎等)通常会使用C语言或其他语言来实现JavaScript中的Map行为。规范说明,如果你正在开发新的浏览器(或无浏览器引擎),那么你的Map必须比遍历每个元素并比较键更快。 - Amadan
“Implementation” 意味着 JS 在浏览器中是如何编译和执行的,它使用一种低级语言,主要使用 C++,据我所知。 - HynekS
所以规范的指令是关于如何编译和执行Map()函数...现在我明白了 :) - user7499416
2
感谢@T.J.Crowder!现在很清楚了。所以当我们调用new Map()时,我们要求引擎创建一个具有JavaScript规范中描述的行为的对象,而不管这种行为是如何生成的。Map可以使用不同类型的结构和逻辑创建,其中哈希表就是其中之一。 - user7499416
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接