为什么在JavaScript中Object()!= Object()?

时间:2014-09-01 19:11:59

标签: javascript

所以问题是两个相同的对象在JavaScript中不相同,让我们说:

Object() == Object()

甚至:

[{a: 1}, {a: 2}].indexOf({a: 1}); //returns -1 not found

这种奇怪行为的原因是什么?

3 个答案:

答案 0 :(得分:8)

通过引用比较对象。只有当两个引用指向同一个对象时,它们才相等。

答案 1 :(得分:2)

对象是引用,当您比较两个引用时,它们将返回false。

other answer(由Eamon Nerbonne提供)这里有一个非常相关的观点:

  

时,对象被认为是等效的      
      
  • 它们与===完全相同(首先打开字符串和数字以确保42等同于Number(42)
  •   
  • 或者它们都是日期并具有相同的valueOf()
  •   
  • 或者它们都是相同类型而不是null并且......      
        
    • 它们不是对象,每==相等(捕获数字/字符串/布尔值)
    •   
    • 或者,忽略具有undefined值的属性,它们具有相同的属性,所有这些属性都被认为是递归等效的。
    •   
  •   

答案 2 :(得分:1)

同样适用于阵列 ([] === []) //returns false

NaN也是一个特殊的价值,它永远不会与自己相等。

NaN === NaN //False