===(厳密等価)は、変換を行わずに値と型を比較します。==(緩い等価)はまず**型強制(type coercion)**を行うため、意外な結果につながります。
js
== ;
== ;
== ;
== ;
== ;
=== ;
=== ;
強制のルールは直感的ではなく、バグの原因になります。たとえば [] == ![] は true です(よく知られた奇癖)。比較の際に JavaScript が裏でこっそり型を変換することを望むことはめったにありません。
常に ===(および !==)を使うこと。よくある意図的な例外は、null または undefined をまとめてチェックする場合だけです。
if (value == null) { ... } // true for BOTH null and undefined — a deliberate idiom
それ以外のすべてでは、厳密等価により比較が予測可能になります。オブジェクトを比較するには deep-equality のチェックが必要です(参照によって比較されるため、{a:1} === {a:1} は false です)。