在我日常工作的一些项目中,我需要访问非常大的 JS 对象中的数据(大约有数千个键值对)。我正在努力提高代码的效率,所以我提出了几个问题:
obj.field
与 obj[field]
)Javascript 对象实际上是哈希,因此对于所有引擎来说复杂度都是
O(1)
。
obj.field
是obj['field']
的别名,所以它们的性能是一样的。
您可以在这里找到一些 JS 哈希性能测试,不幸的是仅适用于您的浏览器引擎。
在最坏的情况下,JS 对象表示为 哈希表,并且具有相同的查找复杂度:平均为
O(1)
,但最坏的情况下为 O(n)
。我猜哈希表的实现就是你的情况,因为你的对象中有很多项目。访问属性的方式没有区别,obj.field
和
obj['filed']
是相同的。还值得一提的是,复杂性并不总是等于哈希表查找的复杂性,在很多情况下它更快。现代 JS 引擎使用称为“隐藏类”和“内联缓存”的技术来加速查找。这是一个相当大的问题,这些技术是如何工作的,我已经在
另一个答案中解释过。 一些相关资源: JavaScript 引擎基础知识:形状和内联缓存 以及
YouTube 视频。
快速键查找的数据结构,您可能需要考虑使用