Javascriptで知っておくべき知識  > 等価演算子(==)と厳密等価演算子(===)

2007年01月26日

「等価演算子(==)」と意外と知られていない「厳密等価演算子(===)」についてのリファレンスです。

”==”と”===”の共通仕様

2つとも基本的には比較して同じなら”true”、異なるなら”false”を返します。型によって比較方法が異なります。比較方法を以下に示します。

1.数値とブール値は”値”によって比較されます。

2.文字列の場合、文字数が同じでかつ同じ文字で構成されている場合に”true”を返します。

3.オブジェクト・配列・関数及びその変数は参照によって比較されます。つまり同じ参照の場合のみ”true”を返します。内部の値が同じでも参照が異なれば”false”を返します。

”==”と”===”の異なる仕様

では実際にどこが異なるかというと、「型を自動変換するかどうか」という点です。”==”は型を自動的に変換し、”===”は型を変換せずに比較を行います。型を意識せずに比較できるという点で”==”は非常に優れていますが、厳密に型も含めて比較したい場合もあります。そんなときには”===”が便利です。

【例】

// 数値とブール値

alert(1 == true);// true

alert(0 == false);// true

alert(1 === true);// false

alert(0 === false);// false

// 数値と文字列

var a = 10;

var b = "10";

alert(a == b);// true

alert(a === b);// false

// オブジェクト

var a = [1,2,3];

var b = a;

alert(a == b);// true

alert(a == [1,2,3]);// false

// 文字列とStringオブジェクト

var a = "abc";

var b = new String("abc");

alert(a == b);// true

alert(a === b);// false

最後の例では、Stringオブジェクトで生成したオブジェクトと文字列式が異なる物であるということが結果として分かりますね。

alert("abc".toString());// abc

上記のような場合、文字列式から直接Stringオブジェクトのメソッドを呼び出せるのでnewで作られた文字列オブジェクトと文字列式の違いは私には分かりませんが・・・。

まとめ

とにかく、型を意識しないで比較する場合”==”、型を特に意識する場合”===”という風に使い分けることができます。覚えておいて損はないと思います。また、不等価演算子”!=”も同様に厳密不等価演算子”!==”というものが存在します。


【トラックバック】

このエントリーのトラックバックURL:

» 等価演算子(==)と厳密等価演算子(===) - Ajax専 from えぐち@エスアンドイーの日記
// 文字列とStringオブジェクト var a = "abc"; var b = new String("abc"); alert(a == b)... [詳細を見る]

トラックバック時刻: 2009年07月31日 15:07