LoginSignup
4
5

More than 5 years have passed since last update.

Javascriptの等価演算子, 厳密等価演算子, Object.is

Posted at

javascriptの等価演算子の動作が複雑なことが良く知られていますが、どこがどう複雑なのか、まとめてみました。

等価演算子(==)

数値変換

String、Boolean、Numberのうち異なるものを比較するときは、すべてNumberに変換される。String->Numberの変換はparseIntの動作に準じ、Boolean->Numberは、trueが1、falseが0とみなされる。特に、StringとBooleanの比較は、以下のようにかなり直感に反した結果になるので注意。

// 例
"123" == 123
"1" == true
"0" == false
"2" != true
"true" != true

文字列変換

オブジェクトをString, Number, Booleanと比較するときは、オブジェクトのtoString()またはvalueOf()の結果に基いて文字列に変換される。Number, Booleanと比較するときは、さらに上述の数値変換が適用される。特に配列が絡むと以下の例のようにトリッキーな比較になるので注意。

// 例:
[1,2,3] == "1,2,3"
[1] == true
[0] == false
[123] == 123
[null] == ''
[] == ''
String Boolean Number null undefined Object NaN
String 数値変換 数値変換 FALSE FALSE 文字列変換 FALSE
Boolean 数値変換 数値変換 FALSE FALSE 文字列変換+数値変換 FALSE
Number 数値変換 数値変換 値*1 FALSE FALSE 文字列変換+数値変換 FALSE
null FALSE FALSE FALSE TRUE TRUE FALSE FALSE
undefined FALSE FALSE FALSE TRUE TRUE FALSE FALSE
Object 文字列変換 文字列変換+数値変換 文字列変換+数値変換 FALSE FALSE 参照 FALSE
NaN FALSE FALSE FALSE FALSE FALSE FALSE FALSE

*1 +0と-0は等しい

厳密等価演算子(===)

等価演算子との違いは、異なる種類の比較はすべてFALSEとなること。このため、上述のような暗黙の変換は行われない。

String Boolean Number null undefined Object NaN
String FALSE FALSE FALSE FALSE FALSE FALSE
Boolean FALSE FALSE FALSE FALSE FALSE FALSE
Number FALSE FALSE 値*1 FALSE FALSE FALSE FALSE
null FALSE FALSE FALSE TRUE FALSE FALSE FALSE
undefined FALSE FALSE FALSE FALSE TRUE FALSE FALSE
Object FALSE FALSE FALSE FALSE FALSE 参照 FALSE
NaN FALSE FALSE FALSE FALSE FALSE FALSE FALSE

*1 +0と-0は等しい

Object.is

厳密等価演算子との違いは、NaN !== NaNだが、Object.is(Nan, NaN) == trueとなることと、Object.is(+0, -0) == falseとなること

String Boolean Number null undefined Object NaN
String FALSE FALSE FALSE FALSE FALSE FALSE
Boolean FALSE FALSE FALSE FALSE FALSE FALSE
Number FALSE FALSE 値*2 FALSE FALSE FALSE FALSE
null FALSE FALSE FALSE TRUE FALSE FALSE FALSE
undefined FALSE FALSE FALSE FALSE TRUE FALSE FALSE
Object FALSE FALSE FALSE FALSE FALSE 参照 FALSE
NaN FALSE FALSE FALSE FALSE FALSE FALSE TRUE

*2 +0と-0は等しくない

4
5
0

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
4
5