JavaScriptには、2つの値が等しいかどうかを判断する2つの方法があります。
等しいシンボル
平等シンボルは、2つの等しい符号で構成されています。==
JavaScriptは弱いタイプの言語です。これは、2つの値を比較するために、等しい標識がタイプをキャストすることを意味します。
コードコピーは次のとおりです。
"" == "0" // false
0 == "" // true
0 == "0" // true
false == "false" // false
false == "0" // true
false == undefined // false
false == null // false
null == undefined // true
"/t/r/n" == 0 // true
上記のコードは、タイプ変換の結果を示しているため、等記号==を使用することは悪いプログラミング習慣であることがわかります。 JavaScriptの複雑なタイプの変換メカニズムにより、結果のエラーは追跡が困難になります。
さらに、タイプの鋳造は、たとえば、文字列を数値と比較すると、パフォーマンスに特定の影響を与える可能性があります。
厳格な平等シンボル
厳密な平等記号は、3つの等しい兆候で構成されています:===
これは、等しいシンボルの操作に似ていますが、厳密に等しいシンボルはキャスト操作を実行しません。
コードコピーは次のとおりです。
"" === "0" // false
0 === "" // false
0 === "0" // false
false === "false" // false
false === "0" // false
false === undefined // false
false === null // false
null === undefined // false
"/t/r/n" === 0 // false
上記のコードにより、コードが明確になります。 2つの値に異なるタイプがある場合、それらはfalseを直接返し、パフォーマンスも改善します。
比較オブジェクト
==および===は等しい兆候と呼ばれますが、比較される2つの値のいずれかがオブジェクトである場合、パフォーマンスは非常に異なります。
コードコピーは次のとおりです。
{} === {}; // 間違い
new String( 'foo')=== 'foo'; // 間違い
新しい番号(10)=== 10; // 間違い
var foo = {};
foo === foo; // 真実
ここでは、2つの値が等しいかどうかを比較するだけでなく、2つの値が同じオブジェクトインスタンスを参照しているかどうかを決定します。これはCのポインターのように動作します。
要約します
ここでは、厳密な平等記号===のみを使用することを強くお勧めします。タイプ変換を行う必要がある場合は、JavaScript独自の複雑な鋳造方法に依存するのではなく、比較前に明示的なタイプ変換を行うことができます。