JavaScript の比較演算子 == と === の違い
JavaScript における比較演算子 ==
と ===
の使い分けって,
C や Java といった他の言語にはない仕組みなので意外と戸惑う人もいるみたいですね.
今回はその違いについてまとめました.
Runstant Lite で作ったサンプルもあります. 良かったら fork して遊んでくださいな♪
等価演算子と厳密等価演算子
JavaScript には, 型変換して比較するあいまいな比較と厳密に比較する方法の2通りがあります.
あいまいな比較 ==
は等価演算子, 厳密な比較 ===
は厳密等価演算子と呼びます.
JavaScript の比較における特徴はこちら
- 2つの文字列は、文字の順序が同一で、長さが等しく、かつ対応する位置の文字が等しいとき、厳密に等しくなります。
- 2つの数値は、数字的に等しいとき(数字の値が等しいとき)、厳密に等しくなります。NaNは、どんなものとも(NaNとさえも)等しくなりません。プラスゼロとマイナスゼロはそれぞれに対し等しくなります。
- 2つの論理オペランドは、両者が true あるいは両者が false のとき、厳密に等しくなります。
- 2つのオブジェクトは、それらが同じオブジェクトを参照しているとき、厳密に等しくなります。
- Null と Undefined の型は、
==
の関係が成り立ちます(しかし===
の関係は成り立ちません)
ちょっとわかりづらいですかね? 下にサンプルを用意しているので, 実行結果と見比べてもらえばなんとなく意味がわかるかと思います.
どっちを使うべき?
どうしても等価演算子を使うとあいまいな比較になってしまいます. 1 かどうかを比較したいのに '1' の時も true になってしまうと困りますよね?
こういったあいまいさはバグの温床になりかねないので, すべて厳密等価演算子を使うべきだと思います.
蛇足: CoffeeScript では??
CoffeeScript は, JavaScript の問題点を解決するために作られた言語です.
CoffeeScript では, ===
は存在せず ==
と書くと JavaSript 変換時に ===
として出力されます.
つまり, すべて厳密等価演算子になります.
この仕様から見ても, 等価演算子ではなく厳密等価演算子を使うべきだということが わかるかと思います.
Runstant Demo
サンプル作りました. よかったら参考までに.