JavaScript运算符===可证明是否可传递?

Ray*_*oal 11 javascript equals transitivity

JavaScript的古怪弱类型==运算符可以很容易地显示为不可传递,如下所示:

var a = "16";
var b = 16;
var c = "0x10";
alert(a == b && b == c && a != c); // alerts true
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何类似的技巧可以使用舍入错误,Infinity或者NaN可能显示===为非传递,或者它是否可以被证明确实是传递性的.

Fré*_*idi 3

Javascript 中的运算符===似乎是尽可能传递的。

NaN可靠地不同于NaN

>>> 0/0 === 0/0
false
>>> 0/0 !== 0/0
true
Run Code Online (Sandbox Code Playgroud)

Infinity可靠地等于Infinity

>>> 1/0 === 1/0
true
>>> 1/0 !== 1/0
false
Run Code Online (Sandbox Code Playgroud)

对象(哈希)总是不同的:

>>> var a = {}, b = {};
>>> a === b
false
>>> a !== b
true
Run Code Online (Sandbox Code Playgroud)

并且由于该===运算符不执行任何类型强制,因此不会发生值转换,因此尽管存在解释器错误,原始类型的相等/不等语义将保持一致(即不会相互矛盾)。