##Javascript における「==」と「===」の違い
どちらも「左辺と右辺が等しいか?」を比較するのですが、決定的な違いは**データ型を比較するかしないかの違いです。
##「==」
値のみでデータ型は比較しない。
(厳密には異なり、詳細は後述にて補足致します。)
##「===」
型と値を比較します。
var num = 123;
var str = '123';
document.write(num == str); // true
document.write(num === str); // false
「数値型の123」と「文字列型の123」を比較した場合、データ型まで比較を行う「===」はfalse、行わない「==」はtrueとなります。
比較において「==」と「===」のどちらかを使うべきですが、基本的には「===」を使います。
その理由として
型の比較を行わない「==」はバグの原因になりやすいなど理由は多々あるようです。
ですから変数の型を意識する意味を含めて、「===」を使ってプログラムを書いく方が良さそうです。
##「==」についての補足です。
前述で「==」は型の比較をしないと言いましたが、厳密に言うと
「型を特定の決まった方に合わせるように変換し、そのあと比較する。」
というニュアンスが正しいです。
例えば文字列型と数値型を「==」で比較した場合は、数値型を文字列型に自動で変換した後に、比較を行います。これはjavascriptで定義されている一定の法則で行われています。
型の自動変換表
演算 | 変換 |
---|---|
文字列と数値 | 文字列に変換 |
数値と論理 | 数値に変換 |
文字列と論理 | 文字列に変換 |