JavaScript’s quirky weakly-typed == operator can easily be shown to be non-transitive as follows:
var a = "16";
var b = 16;
var c = "0x10";
alert(a == b && b == c && a != c); // alerts true
I wonder if there are any similar tricks one can play with roundoff error, Infinity, or NaN that could should show === to be non-transitive, or if it can be proved to indeed be transitive.
The
===operator in Javascript seems to be as transitive as it can get.NaNis reliably different fromNaN:Infinityis reliably equal toInfinity:Objects (hashes) are always different:
And since the
===operator does not perform any type coercion, no value conversion can occur, so the equality / inequality semantics of primitive types will remain consistent (i.e. won’t contradict one another), interpreter bugs notwithstanding.