==、!=と===、!===は曖昧な比較と厳密な比較です。==、!=と===、!===を使い分ける事で以前書いた暗黙の型変換に悩まされない比較を行うことができます。
javascriptは暗黙の型変換を行う言語です。暗黙の型変換とは、黙って値の型(文字列、整数、真偽値等)を変える、という動作です。この暗黙の型変換は便利な一方で予期せぬ挙動を引き起こすことがあります。例えば、次の関数を考えます。この関数が行いたいことは、引数の値を+1して返す、ということです。
(inc = function(v){
return v+1;
})();
この関数は次の結果を引き起こします。
a=inc(2);
//aは3
a=inc("2");
//aは"21"
javascriptは親切にも文字列型である引数に合わせて、数値として扱いたい1を文字列型に変換してくれました。この様に暗黙的な型変換をして欲しくない時があります。if文では次の様なコードが例に挙げられます。
(hoge = function(msg){
if(msg == ""){
//msgが空なら返す
return;
}
//msgを使ったして欲しい処理
})();
javascriptは数値0を文字列””に暗黙的に変換します。そのためmsgに格納されている値が数値0の場合、動作はifの中に入り込み、msgを使ったして欲しい処理を行わずにhoge(msg)を抜け出すものになります。==、!=は比較の際に暗黙的な型変換を行う比較演算子なのに対し===、!==は比較の際に型変換をさせない比較演算子です。これを用いて次の様に記述した場合、msgに格納されている値が数値0であってもif文の中に入り込まずに、msgを使ったして欲しい処理を行います。
(hoge = function(msg){
if(msg === ""){
//msgが空なら返す
return;
}
//msgを使ったして欲しい処理
})();