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可能显示===为非传递,或者它是否可以被证明确实是传递性的.
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)
并且由于该===运算符不执行任何类型强制,因此不会发生值转换,因此尽管存在解释器错误,原始类型的相等/不等语义将保持一致(即不会相互矛盾)。