JavaScript的双等号(==)是否总是对称的?

37

有很多情况下,JavaScript的类型强制比较运算符不具有传递性。例如,参见“JavaScript equality transitivity is weird”。

然而,是否存在这样的情况,即==不是对称的?也就是说,当a == btrueb == a却为false吗?

3个回答

37

这应该是对称的。然而,在某些版本的 IE 中存在不对称情况:

window == document; // true
document == window; // false

11
哇,太棒了。你能具体说明这发生在哪些版本的IE中吗? - Trevor Burnham
在Win8.0上使用IE10,我发现在“浏览器模式:IE8”中出现了这种行为(而不是在IE10、IE9或IE7模式中)。 - Jeroen

30
在JavaScript中,==始终是对称的
文档规定: 注意2:相等性运算符保持以下不变量:
  • A != B等价于!(A == B)
  • A == B等价于B == A,除了在评估A和B的顺序方面。

2
那不应该是“交换律”吗? - Stéphan Kochen
9
也许应该这样,但事实并非如此。关系不是运算符。 (翻译后的内容) - SLaks
谢谢您的纠正 - 自我拿到数学学位以来已经太久了! - Trevor Burnham

11

你实际问题的答案(操作符是否对称)是肯定的。 ECMA-262规范明确指出:

注意2: 相等运算符维护以下不变式:

  • A != B 等价于 !(A == B)
  • A == B 等价于 B == A,只有AB的评估顺序不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接