ObjectA的成本=== ObjectB

时间:2016-04-05 07:45:29

标签: javascript arrays

===运算符如何为JavaScript中的对象工作?我想知道这一点,因为我想知道做>>> [0,1,2] == [0,1,2] True >>> [0,1,2] == [0,2,1] False >>> [0,1] == [0,1,2] False 的费用是多少?由于(ObjectA === ObjectB)使用===来比较对象和返回索引,它会成为一项代价高昂的操作吗? (这里的数组是一个对象数组。)我读了this但是听不懂。

3 个答案:

答案 0 :(得分:1)

  

我想知道做(ObjectA === ObjectB)

的费用是多少

与执行1 === 1的费用大致相同。

即使这是一项昂贵的操作,它根本不是(根本),你还会做什么?如果你想比较,你必须比较。

答案 1 :(得分:1)

复杂性方面的成本肯定是O(1),因为它在某些方面可能至关重要。 Array.indexOfO(n),但不要担心,对于某些对象的n次比较,您不会得到二次复杂度。

另一方面,您必须记住,使用nArray.indexOf实际上是二次方。

作为指导原则,我通常禁止自己在循环中使用Array.indexOf,并找到使用哈希的方法。

答案 2 :(得分:0)

来自MDN

  

Strict equal(===)如果操作数相等且类型相同,则返回true。另请参阅JS中的Object.is和sameness。

来自测试

没有办法在没有查看实现的情况下确切地说明操作本身的复杂性,但作为一般规范,它被视为O(1)(直到有人证明不是这样)。

如果您要查看两个对象是否相等,即当对象相同时,对同一对象===的引用最快。我完成了herehere的测试。 enter image description here

因此ObjectA === ObjectB需要的时间与d = 1 + 1相同。所以我认为可以安全地说它是一个O(1)复杂性操作,并通过比较相关对象的相应objectID来实现。enter image description here