JavaScript厳密等しい演算子==

3716 ワード

JavaScriptは、2つの等しい演算子を提供します.==と==です.
簡単に言えば、それらの違いは、等しい演算子(=)が、2つの値が等しいかどうかを比較し、厳密に等しい演算子(==)が「同じ値」かどうかを比較します.2つの値が同じタイプではない場合、厳密に等しい演算子(==)は直接falseに戻り、等しい演算子(=)はそれらを同じタイプに変換し、厳密に等しい演算子で比較します.
1.厳密に等しい演算子
(1)異なるタイプの値が2つの値の種類が異なる場合、直接falseに戻ります.
1 === "1" // false
1=="1" // true
true === "true" // false
(2)同じクラスの元のタイプの値が同じタイプの元のタイプの値(数値、文字列、ブール値)と比較した場合、同じ値でtrueに戻り、値が異なるとfalseに戻ります.
1 === 0x1 // true
上のコードは10進数の1と16進数の1を比較します.タイプと値が同じなので、trueに戻ります.NaNは、自身を含むいかなる値とも等しくないことに留意されたい.また、正0は負0となります.
NaN === NaN  // false
+0 === -0 // true
(3)複合タイプ値の2つの複合タイプ(オブジェクト、配列、関数)のデータ比較の場合、それらの値が等しいかどうかを比較するのではなく、それらが同じアドレスを指すかを比較します.
{} === {} // false
[] === [] // false
(function () {} === function () {}) // false
上のコードはそれぞれ2つの空のオブジェクト、2つの空の配列、2つの空の関数を比較します.結果は同じではありません.複合タイプの値に対して厳密に等しい演算を比較したのは、同じメモリアドレスを参照しているかどうかであり、演算子の両側の空のオブジェクト、空の配列、空の関数の値は、それぞれ異なるメモリアドレスに保存されています.結果はもちろんfalseです.二つの変数が同じオブジェクトを参照すると、それらは同じです.
var v1 = {};
var v2 = v1;
v1 === v2 // true
(4)undefinedとnull undefinedとnullは自身の厳格さと同じです.
undefined === undefined // true
null === null // true
変数宣言後のデフォルト値はundefinedであるため、二つの宣言は未割り当て変数だけが等しいです.
var v1;
var v2;
v1 === v2 // true
2.厳密に等しくない演算子
厳密に等しい演算子には、対応する「厳密には等しくない演算子」があります.そのアルゴリズムは、厳密に等しい演算子の結果を求めて、逆の値を返します.
1 !== '1' // true
//    
!(1 === '1')
上のコードの中に感嘆符があります.は、次の表式の逆の値を求めます.
3.等しい演算子
等しい演算子が同じ種類のデータを比較するときは、厳密に等しい演算子と同じです.
1 == 1.0
//    
1 === 1.0
異なるタイプのデータを比較する場合、等しい演算子はまずデータをタイプ変換し、厳密な等しい演算子で比較します.次の四つの場合に分けて、異なる種類の値を相互に比較するルールを議論します.(1)元のタイプの値は元のタイプの値を数値に変換して比較します.
1 == true // true
//     1 === Number(true)

0 == false // true
//     0 === Number(false)

2 == true // false
//     2 === Number(true)

2 == false // false
//     2 === Number(false)

'true' == true // false
//     Number('true') === Number(true)
//     NaN === 1

'' == 0 // true
//     Number('') === 0
//     0 === 0

'' == false  // true
//     Number('') === Number(false)
//     0 === 0

'1' == true  // true
//     Number('1') === Number(true)
//     1 === 1

'
123 \t' == 123 // true // ,
上のコードは文字列とブール値を数値に変換して比較します.(2)オブジェクトと元のタイプの値との比較対象(ここでは一般化の対象、配列と関数を含む)を元のタイプの値と比較した場合、オブジェクトを元のタイプの値に変換して比較します.
//         ,      
[1] == 1 // true
//     Number([1]) == 1

//          ,       
[1] == '1' // true
//     String([1]) == '1'
[1, 2] == '1,2' // true
//     String([1, 2]) == '1,2'

//          ,       
[1] == true // true
//     Number([1]) == Number(true)
[2] == true // false
//     Number([2]) == Number(true)
上のコードの中で、配列[1]は数値と比較し、先に数値に変換して比較します.文字列と比較すると、まず文字列に変換して比較します.ブール値と比較すると、オブジェクトとブール値は先に数値に変換されて比較されます.(3)undefinedとnull undefinedとnullは他のタイプの値と比較した場合、結果はすべてfalseであり、それらが比較した場合はtrueとなります.
false == null // false
false == undefined // false

0 == null // false
0 == undefined // false

undefined == null // true
(4)等しい演算子の欠点は等しい演算子の隠しタイプの変換であり、直感に反する結果をもたらす.
0 == ''             // true
0 == '0'            // true

2 == true           // false
2 == false          // false

false == 'false'    // false
false == '0'        // true

false == undefined  // false
false == null       // false
null == undefined   // true

' \t\r
' == 0 // true
これらの表現は直感と違って、間違えやすいです.したがって、等しい演算子(==)を使わないでください.厳密な等しい演算子(===)だけを使用した方がいいです.
JavaScript教程から抜粋する.