有什么可以保证访问 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)?
是的,这是可能的。
这是关于我在亚马逊面试时与面试官的辩论。
让我创建一个对象:
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)?
是的,这是可能的。