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