是否有任何保证在JavaScript中访问对象属性的恒定时间?

时间:2015-12-15 14:43:54

标签: javascript data-structures time-complexity complexity-theory

这是关于我在亚马逊采访时与采访者进行的辩论。

让我创建一个对象:

var Obj = {};
Obj['SomeProperty'] = function ( ) { console.log("Accessed some property"); };
Obj[69] = true;

当我随后访问Obj['SomeProperty']Obj[69]这两个属性function ( ) { console.log("Accessed some property"); };和{{1}时,JavaScript 保证中是否存在任何内容?在O(1)时间内查找?我知道访问操作符69给予经验丰富的程序员一种他正在处理O(1)查找结构的印象,但是JavaScript引擎不可能以这样的方式实现[]在O(1)中查找属性

1 个答案:

答案 0 :(得分:5)

  

JavaScript中是否有任何内容可以保证在O(1)时间内查找值?

没有。 JavaScript不提供任何复杂性保证,except for ES6 collections

  

我知道访问操作符[]给予经验丰富的程序员一种他处理O(1)查找结构的印象

是的,这是一个合理的期望。引擎采用各种优化,从隐藏类到哈希映射到动态数组,以满足这些假设。

当然,永远不要忘记JS对象是复杂的野兽,访问一个简单的属性可能会触发一个getter陷阱,而这个陷阱又可以做任何事情。

  

JavaScript引擎是否有可能以某种方式实现Object,以便在O(1)中不查找属性?

是的,这是可能的。