有什么可以保证访问 JavaScript 中对象的 属性 的恒定时间吗?

Is there anything that guarantees constant time for accessing a property of an object in JavaScript?

这是关于我在亚马逊面试时与面试官的辩论。

让我创建一个对象:

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

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

Is there anything in the JavaScript guaranteeing that the values are looked up in O(1) time?

没有。 JavaScript 不提供任何复杂性保证,

I know the access operator [] gives a seasoned programmer the impression that he's dealing with an O(1) lookup structure

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

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

Can't it be possible for a JavaScript engine to implement Object in a way such that properties are not looked up in O(1)?

是的,这是可能的。