Javascript 为什么查找总是常数时间而不是O(n)

Javascript 为什么查找总是常数时间而不是O(n),javascript,computer-science,lookup,Javascript,Computer Science,Lookup,我使用的是JavaScript,但我认为这与许多计算机语言相关 为什么在下列情况下在obj(Object)中查找是O(1)?它不应该是O(n)?有人能给我解释一下吗,比如说,提供一个实际的,低层次的解释,为什么这不是O(n) 让arr=['m','k','b','z'] 设obj={a':true,'b':true,'c':true} for(设i=0;i

我使用的是JavaScript,但我认为这与许多计算机语言相关

为什么在下列情况下在
obj
Object
)中查找是
O(1)
?它不应该是
O(n)
?有人能给我解释一下吗,比如说,提供一个实际的,低层次的解释,为什么这不是
O(n)

让arr=['m','k','b','z']
设obj={a':true,'b':true,'c':true}
for(设i=0;i

上面的时间复杂度被认为是
O(n)
,但希望你能明白为什么这个问题对我来说会上升,因为为了找到(例如)if
obj['b']==arr[2]
(这正是我对条件
if(obj[arr[I]])
)所做的事情,我自然会认为它应该遍历
obj
的所有属性并进行比较,但这不是它自己的循环类型,所以说总体上它应该是
O(n^2)
?同样,如果没有,请解释为什么,为什么它不循环,但能够立即选择它(
O(1)
)。

对象是散列。如果任何属性查找都是
O(n)
,这将是非常糟糕的-它或多或少会破坏甚至使用对象的目的,因为会有如此严重的性能损失。如果语言实现创建一个跳转表,您将了解一切。例如,您必须执行一些算术(用于地址计算)并跳转到所需的代码。是的,我知道了,谢谢。
let arr = ['m', 'k', 'b', 'z']
let obj = { 'a': true, 'b': true, 'c': true}

for (let i = 0; i < arr.length; i++) {
  if ( obj[arr[i]] ) {
    return true
  }
}