8
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-12-02

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

8
13
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?