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