对象的==和===相同吗?

问题描述 投票:0回答:4

我知道=====在应用于原始值时的区别。但对于对象来说,它们似乎都是一个简单的身份比较。

var a = {}
var b = a
var c = {}

a == b // true
a === b // true

a == c // false
a === c // false

是否有任何情况比较两个对象将为每个运算符提供不同的结果,或者它们在功能上是否相同?

javascript equality
4个回答
2
投票

是的,将两个对象与==进行比较与将它们与===进行比较相同。就像用==比较两个字符串和===一样。如果值的类型相同,则两种比较方法都将给出相同的结果。 As the specification states

7.2.14 Abstract Equality Comparison

比较x == y,其中x和y是值,产生真或假。这样的比较如下进行:

  1. 如果Type(x)与Type(y)相同,那么 返回执行Strict Equality Comparison x === y的结果。

1
投票

看起来像

我知道在javascript中“检查对象相等性”的唯一方法是深入检查每个可能的键(但即便如此,它只是鸭子类型检查)


1
投票

额外=在===确保双方属于同一类型。 ac都是对象,类型相同。所以=====在这里无关紧要。


-1
投票

嗯...... ===是“比较身份和类型”。你已经确定你正在比较两个对象(所以“类型”是相同的),留下“比较身份”,这与==相同。

同样,如果你比较两个numbers,因为你已经知道它们是相同类型(number),=====相同。这里的对象与原语没有什么特别的或不同的。只是对象的唯一类型是object

© www.soinside.com 2019 - 2024. All rights reserved.