[JavaScript基礎]JavaScriptでの判断

3494 ワード

1.==と==の違い==(equality相当)の両方の値の種類が異なる場合は、まずタイプ変換を行って、比較します.===(identity恒久など)はタイプ変換をしないので、タイプが違うのは違います.
厳密な演算子の演算規則
(1)異なるタイプの値:2つの値の種類が異なる場合、直接falseに戻ります.
(2)同じクラスの元のタイプの値:同じタイプの元のタイプの値(数値、文字列、ブール値)を比較した場合、値が同じならtrueに戻り、値が違ったらfalseに戻ります.
(3)同じクラスの複合タイプの値:2つの複合タイプ(オブジェクト、配列、関数)のデータ比較の場合、それらの値が等しいかどうかを比較するのではなく、それらが同じオブジェクトを指すかを比較します.
(4)undefinedとnull:undefinedとnullは自身の厳格さと同じで、それらが互いに比較する時に結果はfalseで、これは==と違っているところです.
(5)NaN:NaNは他のシンボルと比較してfalseに戻り、2つのNaNがfalseであると判断したので、isNaNまたはObject.is()で判断するしかない.
null === null  //true
undefined === undefined  //true
もちろん、厳密に等しい演算子===も演算数をタイプ変換しませんが、-0と+0の2つの数値を同じとして扱います.また、2つのNaNを等しくないと見なします.
「=」厳密な演算子の演算規則
「=」の等しい演算子は、同じ種類のデータを比較する場合、厳密に等しい演算子と同じです.異なるタイプのデータを比較する場合、等しい演算子はまずデータをタイプ変換し、厳密な等価演算子で比較します.タイプ変換規則は以下の通りです.
データの種類
trueの値に変換
falseの値に変換
Udefined
なし
undefined
ボロア
true
false
Object
nullでない時は全部trueです.
null
Number
0とNaN以外はtrueです.
0とNaN
String
空の文字列ではない
'(空の文字列)
(1)元のタイプの値:元のタイプのデータは数値タイプに変換して比較します.文字列とブール値はいずれも数値に変換されます.基本タイプの値をブール型に変換するときのルール:
データの種類
trueの値に変換
falseの値に変換
Udefined
なし
undefined
ボロア
true
false
Object
nullでない時は全部trueです.
null
Number
0とNaN以外はtrueです.
0とNaN
String
空の文字列ではない
'(空の文字列)
(2)オブジェクトは元のタイプの値と比較します.オブジェクト(ここでは一般的なオブジェクト、数値と関数を含む)は元のタイプの値と比較すると、オブジェクトは元のタイプの値に変換され、比較されます.オブジェクトをベースタイプに変換し、そのtoStringまたはvalueOf方法を利用します.jsコア内蔵クラスは、toStringより先にvalueOfを試します.例外はDateで、DateはtoString変換を利用しています.
(3)undefinedとnull:undefinedとnullは他のタイプの値と比較した場合、結果はすべてfalseであり、それらが互いに比較した場合、結果はtrueである.
(4)等しい演算子の欠点:等しい演算子の隠しタイプの変換は、直感に反するいくつかの結果をもたらす.
(5)NaN:NaNは他のシンボルと比較してfalseに戻り、2つのNaNがfalseであると判断したので、isNaNまたはObject.is()で判断するしかない.
2.Object.is()
現在選択されている要素セットを表式でチェックします.少なくとも一つの要素がこの与えられた表式に該当するとtrueを返します.要素が一致していない場合、または表式が無効である場合は、「false」を返します.
Object.is()は、以下のような場合には、2つの値が同じであると考えられます.
  • の値はundefined
  • です.
  • の値はいずれもnull
  • です.
  • の値は全部trueですか?それとも全部false
  • です.
  • の値は同じ数の文字からなる文字列
  • である.
  • の値は同じオブジェクト
  • を指す.
  • の値は全部数字です.
  • は全部プラスゼロ+0
  • です.
  • は全部マイナス0-0
  • です.
  • はNaN
  • です.
  • は、ゼロとNaN以外の同じ数字
  • である.
    Object.is()===との違い:Object.is()は2つのNaNを比較するとtrueに戻り、Object.is()は+0−0を判断するとfalseに戻り、===は逆である.
    3.3つの判定記号の違い
    イメージ
    4.例:
    '' == '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 。 var a = undefined; if(!a){ console.log("1"); //1 } var a = undefined; if(a == null){ console.log("1"); //1 } var a = undefined; if(a === null){ console.log("1"); // } Object.is('foo', 'foo'); // true Object.is(window, window); // true Object.is('foo', 'bar'); // false Object.is([], []); // false var test = { a: 1 }; Object.is(test, test); // true Object.is(null, null); // true // Object.is(0, -0); // false Object.is(-0, -0); // true Object.is(NaN, 0/0); // true