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さん、コメントにて厳密な補足ありがとうございます!
というわけで、本記事はコメント欄までで完結します、続けてお読みください↓↓↓

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.