for 循环中 "in" 运算符的大 O

Big O of "in" operator inside for loop

考虑这个片段:

const obj1 = {1:1, 2:1, 3:1}
const obj2 = {1:1, 4:1, 9:1}

for(let key in obj1){
    if(!(key ** 2 in obj2)) return false
  }

这个算法的大O可以考虑O(n)还是应该是O(n^2)因为:

if(!(key ** 2 in obj2))

被认为是循环遍历obj2的所有项目(搜索)

** 注意**:假设obj1和obj2的长度相等

我怀疑 in 没有遍历所有项目,而是像哈希表一样工作。所以我会说它的 O(n).

一个JavaScript对象实际上是一个散列table,所以查找一个键是O(1)。

因此整个算法是 O(n)。