我知道==
和===
在应用于原始值时的区别。但对于对象来说,它们似乎都是一个简单的身份比较。
var a = {}
var b = a
var c = {}
a == b // true
a === b // true
a == c // false
a === c // false
是否有任何情况比较两个对象将为每个运算符提供不同的结果,或者它们在功能上是否相同?
是的,将两个对象与==
进行比较与将它们与===
进行比较相同。就像用==
比较两个字符串和===
一样。如果值的类型相同,则两种比较方法都将给出相同的结果。 As the specification states:
7.2.14 Abstract Equality Comparison
比较x == y,其中x和y是值,产生真或假。这样的比较如下进行:
- 如果Type(x)与Type(y)相同,那么 返回执行Strict Equality Comparison x === y的结果。
看起来像
我知道在javascript中“检查对象相等性”的唯一方法是深入检查每个可能的键(但即便如此,它只是鸭子类型检查)
额外=在===
确保双方属于同一类型。 a
和c
都是对象,类型相同。所以==
或===
在这里无关紧要。
嗯...... ===
是“比较身份和类型”。你已经确定你正在比较两个对象(所以“类型”是相同的),留下“比较身份”,这与==
相同。
同样,如果你比较两个number
s,因为你已经知道它们是相同类型(number
),===
与==
相同。这里的对象与原语没有什么特别的或不同的。只是对象的唯一类型是object
。