number 型は内部で整数型と浮動小数点型に分かれているのですが、===
演算子はそれぞれを別の型と見なしてしまい、数値として等価であっても false
になります。
alert (1 === 1.0); // false
alert (parseInt ('1') === parseFloat ('1')); // false
!==
演算子は左辺と右辺の型が違うと false
になる不具合が内部型にも該当し、数値として等価でなくてもfalse
になります。
alert (1 !== 2.0); // false
alert (parseInt ('1') !== parseFloat ('2')); // false