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