なぜ”null>=0″はTRUEとなるのか?[JavaScript]

JavaScriptで”null == 0″はFALSEと判定されますが、”null >= 0″ はTRUEと判定されます。

例えば、変数valueに格納した値を “if(value >= 0)” といったように条件文で比較するとします。

if(value >= 0) {
console.log("0以上の値だよ"); // valueがnullでも、この処理が走る。
}

この時、変数valueがnullの場合は、条件式がFALSEとなりそうですが、実際にはTRUEとなり、意図した動作にならない場合があります。

一方で、条件式を”==”や”>”にした場合はFALSEとなるのです。

if(value == 0) {
console.log("0だよ"); // valueがnullの場合は処理は行われない。
}

if(value > 0) {
console.log("0より大きい値だよ"); // valueがnullの場合は処理は行われない。
}

なぜ、このように等号と不等号で挙動が異なるのでしょうか?

“null >= 0” が TRUEとなる理由

「不等号による比較(>=, <=、>, <)」と「等号記号による比較(==)」では、右辺と左辺の値によって処理が異なります。

「不等号による比較」では「String型ではない場合は、両辺を数値化(ToNumber)」をしてから比較の処理が行われます。String型ではないnullを数値化すると0になるため、”null >= 0″ は”0 >= 0″ に置き換わり、TRUEと判定されるのです。また、等号がない”null > 0″ の場合も同じく”0 > 0″に変換され、この場合はFALSEとなります

一方で、等号記号による比較では「String型、Number型, Boolean型でのみ両辺が数値化」されます。そのためnullは数値化には該当せず、”null == 0″は等しくないと判定され、FALSEが返されます。

[参考]

Related Posts