今回のテーマは、JavaScriptで比較演算子を用いた場合の真偽値判定についてです。
とあるコードを読んでいたところ、下記のような条件分岐に出会いました。
var temp = '0';
if (temp == false)
{
alert('error');
}
結果から申し上げますと、このコードが実行された場合、アラートが表示されます。
しかし私はこの結果に納得がいきませんでした。
まず前提として、JavaScriptでは、if文の分岐条件にboolean型以外の値が入った場合、
下記のような判定になります。
- 'abc' → true // 文字列
- '0' → true // 文字列0
- 'false' → true // 文字列のfalse
- '' → false // 空文字列
- 0 → false // 数字の0
- -1 → true // 数字の負の値
- 1 → true // 数字の正の値
- undefined → false // undefined
- null → false // null
上記を踏まえて再びコードに戻ります。
var temp = '0';
if (temp == false)
{
alert('error');
}
'0' は false, false はもちろん false ですので、
'0' == false は true == false となり、不一致。
つまり、アラートは表示されないはずです。
ですが、比較演算子になると少々訳が違うようです。
● 文字列'0' (=true) と bool値true (=true) の比較
'0' == true → false
● 数字の0 (=false) と bool値false (=false) の比較
0 == false → true
● 数字の負の値 (=true) と bool値true (=true) の比較
-1 == true → false
● 文字列'false' (=true) と bool値false (=false) の比較
'false' == false → false
非常に奥が深い世界です。
比較に関して正確に理解していない場合、
誤った挙動を起こさないためにも、できるだけ厳密演算子を用いたほうが良さそうです。
0 件のコメント:
コメントを投稿