JavaScript Garden-等しいと比較


同等と比較
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
" == 0 // true

上記の表は強いタイプの変換を示しており、==を用いることがプログラミング習慣が悪い主な原因として広く考えられているが、その複雑な変換規則のため、追跡しにくい問題を招く.
また、強制タイプ変換は、文字列が配列と比較するために事前に数値に強制的に変換されるなど、パフォーマンスの消費をもたらします.
厳密イコールオペレータ
厳密なイコールオペレータは、===という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
" === 0 // false

上記の結果はより明確で、コードの分析に有利である.2つのオペランドのタイプが異なる場合、等しくないことは間違いなく、パフォーマンスの向上にも役立ちます.
オブジェクトの比較=====のオペレータはすべてオペレータに等しいが、そのうちの1つのオペランドがオブジェクトである場合、動作は異なる.
{} === {};                   // false
new String('foo') === 'foo'; // false
new Number(10) === 10;       // false
var foo = {};
foo === foo;                 // true

ここで、オペレータが比較するのは、値が等しいかどうかではなく、同じアイデンティティに属しているかどうかです.すなわち,オブジェクトの同じインスタンスのみが等しいと考えられる.これはPythonのisとCのポインタの比較に似ています.
結論
厳密イコールオペレータの使用を強くお勧めします.タイプが変換する必要がある場合は、言語自体の複雑な強制変換ルールではなく、比較前の明示的の変換を使用する必要があります.