在我作为日常工作的一部分工作的一些项目中,我需要访问非常大的JS对象中的数据(大约数千个键值对)。我试图提高代码的效率,所以我提出了几个问题:
obj.field
vs obj[field]
)答案 0 :(得分:9)
Javascript对象实际上是哈希值,因此所有引擎的复杂度为O(1)
。
obj.field
是obj['field']
的别名,因此它们具有相同的效果。
您可以找到一些JS哈希性能测试here,遗憾的是仅适用于您的浏览器引擎。
答案 1 :(得分:0)
在最坏的情况下,JS对象查找的复杂度为O(1),这是哈希表查找的复杂度。不幸的是,您的情况最糟糕,因为您的对象中有太多物品。 obj.field
和obj['filed']
的访问方式没有什么不同。
还值得一提的是,复杂度并不总是等于哈希表查找的复杂度,在许多情况下它会更快。现代JS引擎使用称为隐藏类和 inline caching 的技术来加快查找速度。这是一个很大的问题,这些技术如何工作,我在another answer中对此做了解释。
一些相对资源: