向JavaScript中添加有序哈希数据类型是否合理?

Would it be reasonable to add an ordered hash data type to JavaScript?

本文关键字:是否 数据类型 哈希 JavaScript 添加      更新时间:2023-09-26

我在Stack Overflow和其他地方看到了几个问题,询问如何在Javascript中实现有序哈希,有序对象或有序字典。下面是一些例子:

  • JavaScript中的有序哈希
  • Javascript数据结构快速查找和有序循环?

对我来说,根据官方ECMAScript规范,对象中属性的顺序是"依赖于实现的",尽管大多数浏览器都是按照属性定义的顺序循环的。我可以想象一些程序员测试他们的脚本,看到一切都很好,没有意识到,它可能在一些情况下以意想不到的方式运行,至少在原则上。

我的问题是:他们能改变规范来指定属性的顺序吗?对我来说,这似乎不会太难,但我不知道我是否错过了什么。这将鼓励剩下的几个浏览器的制造商做其他人都在做的事情,增加一个有用的功能。他们基本上会说JavaScript解释器应该做大多数JavaScript解释器所做的事情。我无法想象这样的改变会导致任何类型的兼容性问题。

如果这不是一个现实的选择,为什么不呢?我没有任何近期的实际目标。我在努力满足我的好奇心,为什么语言是这样的

指定对象属性的枚举顺序曾在ECMAScript 5中讨论过,但由于发现没有跨浏览器的实际标准(据我所知)而被删除。

这当然是一个合理的愿望,特别是在JSON兴起之后。

存储哈希表比保存顺序为1的哈希表占用的内存更少。我想这就是为什么规范允许忽略顺序的原因之一。

主要浏览器保留条目顺序可能不会破坏由不知情的开发人员编写的现有脚本。然而,我可以想象EcmaScript实现的最小内存占用会牺牲这个非标准的特性。


1例如,在Java中,您可以选择HashMapLinkedHashMap