Help us understand the problem. What is going on with this article?

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away