“我猜大多数浏览器都实现了它,如果不是为什么不呢?是否有任何要求如何在 ECMAScript 规范中实现它?”
我不是专家,但我想不出任何理由为什么语言规范会详细说明其功能必须如何在内部实现。这种约束绝对没有任何意义,因为它不会以性能以外的任何方式影响语言的功能。
编辑- 尽管有两次投反对票,但事实上,这是绝对正确的,实际上 ECMA-262 规范的实现独立性在规范的第 8.6.2 节中有具体描述:
“这些表中的描述表明它们对原生 ECMAScript 对象的行为,除非本文档中针对特定种类的原生 ECMAScript 对象另有说明。宿主对象可以支持这些具有任何依赖于实现的行为的内部属性,只要它与特定的本文档中所述的宿主对象限制“
“除非另有说明,否则宿主对象可以以任何方式实现这些内部方法;”
“哈希”这个词在整个 ECMA-262 规范中都没有出现。
(原文,续)
例如,Internet Explorer 6.0 和 Google Chrome 的 V8 中 Javascscript 的实现几乎没有任何共同之处,但(或多或少)都符合相同的规范。
如果你想知道一个特定的 javascript 解释器是如何做某事的,你应该专门研究那个引擎。
哈希表是创建交叉引用的有效方式。它们不是唯一的方法。例如,一些引擎可能会优化小集合的存储(对于这些集合,哈希表的开销可能效率较低)。
归根结底,您需要知道的是,它们有效。可能有更快的方法来创建大型集合的查找表,使用 ajax,甚至在内存中。例如,请参阅John Reseig 博客中关于使用特里树数据结构的这篇文章的有趣讨论。
但这既不在这里也不在那里。您选择使用 this 还是原生 JS 对象,不应由有关 JS 如何实现对象的信息驱动。它应该仅由性能比较驱动:每种方法如何扩展。这是您将通过执行性能测试获得的信息,而不仅仅是了解 JS 引擎实现的一些信息。