Edited at

JavaScriptの大小比較は数値に変換される

More than 1 year has passed since last update.

JavaScriptにおける大小比較では、数値以外の型を数値に変換してから比較します。

従って、以下のような直感に反する例がtrueになったりします。

3 < 5     //true (うん)

2 >= 4 //false (うんうん)
true <= 8 //true ?!(trueは数値変換すると1)
null < 7 //true !?(nullは数値変換すると0)
[9] > 6 //true !?!?!?!?(配列は数値変換すると「要素が1個の数値」の時のみその数値になる)

同値比較では、等価演算子(==)と厳密等価演算子(===)があり

後者の厳密な比較を用いると、型が一致しない時はfalseを返してくれますが、

大小比較にはそんな便利な演算子はありません。

直感的に「片方が数値じゃないなら大小比較もクソも無い、よってfalseを返すだろう」

などと甘えているとJavaScriptに刺されます。

特にやってしまいそうなのが、nullを許容する数値型の変数を大小比較する際に

「nullは0になる」を忘れてバグを引き起こすパターンでしょうね。

大小比較の対象となる変数の型については十分注意しましょう。

なお、唯一の例外として両方が文字列の場合の大小比較は辞書順(文字コード順)です。

記事タイトルにあるような「数値への変換」もありません。

(追記)

gaogao_9さん、コメントにて厳密な補足ありがとうございます!

というわけで、本記事はコメント欄までで完結します、続けてお読みください↓↓↓