[JavaScript基礎]JavaScriptでの判断
3494 ワード
1.==と==の違い
厳密な演算子の演算規則
(1)異なるタイプの値:2つの値の種類が異なる場合、直接falseに戻ります.
(2)同じクラスの元のタイプの値:同じタイプの元のタイプの値(数値、文字列、ブール値)を比較した場合、値が同じならtrueに戻り、値が違ったらfalseに戻ります.
(3)同じクラスの複合タイプの値:2つの複合タイプ(オブジェクト、配列、関数)のデータ比較の場合、それらの値が等しいかどうかを比較するのではなく、それらが同じオブジェクトを指すかを比較します.
(4)undefinedとnull:undefinedとnullは自身の厳格さと同じで、それらが互いに比較する時に結果はfalseで、これは
(5)NaN:NaNは他のシンボルと比較してfalseに戻り、2つのNaNがfalseであると判断したので、
「=」厳密な演算子の演算規則
「=」の等しい演算子は、同じ種類のデータを比較する場合、厳密に等しい演算子と同じです.異なるタイプのデータを比較する場合、等しい演算子はまずデータをタイプ変換し、厳密な等価演算子で比較します.タイプ変換規則は以下の通りです.
データの種類
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であると判断したので、
2.Object.is()
現在選択されている要素セットを表式でチェックします.少なくとも一つの要素がこの与えられた表式に該当するとtrueを返します.要素が一致していない場合、または表式が無効である場合は、「false」を返します.
Object.is()は、以下のような場合には、2つの値が同じであると考えられます.の値はundefined です.の値はいずれもnull です.の値は全部trueですか?それとも全部false です.の値は同じ数の文字からなる文字列 である.の値は同じオブジェクト を指す.の値は全部数字です. は全部プラスゼロ+0 です.は全部マイナス0-0 です.はNaN です.は、ゼロとNaN以外の同じ数字 である.
3.3つの判定記号の違い
イメージ
4.例:
==
(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つの値が同じであると考えられます.
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