JavaScript厳密等しい演算子==
3716 ワード
JavaScriptは、2つの等しい演算子を提供します.==と==です.
簡単に言えば、それらの違いは、等しい演算子(=)が、2つの値が等しいかどうかを比較し、厳密に等しい演算子(==)が「同じ値」かどうかを比較します.2つの値が同じタイプではない場合、厳密に等しい演算子(==)は直接falseに戻り、等しい演算子(=)はそれらを同じタイプに変換し、厳密に等しい演算子で比較します.
1.厳密に等しい演算子
(1)異なるタイプの値が2つの値の種類が異なる場合、直接falseに戻ります.
厳密に等しい演算子には、対応する「厳密には等しくない演算子」があります.そのアルゴリズムは、厳密に等しい演算子の結果を求めて、逆の値を返します.
3.等しい演算子
等しい演算子が同じ種類のデータを比較するときは、厳密に等しい演算子と同じです.
JavaScript教程から抜粋する.
簡単に言えば、それらの違いは、等しい演算子(=)が、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教程から抜粋する.