さて、ここに私の短い質問があります:
===and!==演算子は型を比較してから値を比較し、 ==and!=は型をキャストしてから値を比較することを知っています。
if(myVar)とはどうif(!myVar)ですか?
と の動作に違いはありif(myVar == true)ますif(myVar == false)か?
さて、ここに私の短い質問があります:
===and!==演算子は型を比較してから値を比較し、 ==and!=は型をキャストしてから値を比較することを知っています。
if(myVar)とはどうif(!myVar)ですか?
と の動作に違いはありif(myVar == true)ますif(myVar == false)か?
はい、違いがあります。例えば:
if('true' == true) {
alert("This doesn't happen");
}
if('true') {
alert("But this does happen.");
}
理由?number両方とも比較のためにsに変換されます。'true'に変換されNaN、trueに変換され1ます。
== trueこの愚かさを避け、決してまたはを書いてはいけません== false。
はい、違いがあります。既に述べたように、値を と比較すると==、型変換が行われます。
値が同じ型でない場合、両方とも文字列または数値に変換されます。値の 1 つがブール値で、もう 1 つがそうでない場合、両方の値が数値に変換されます。
比較アルゴリズムは、仕様のセクション 11.9.3 で定義されています。重要なステップは次のとおりです。
7. Type(y) が Boolean の場合、比較の結果を返し
x == ToNumber(y)ます。
したがってtrue、最初に数値に変換され、後でmyVar同様に数値に変換されます。
if(myVar)ただし、値は boolean に変換されます。
2.
ToBoolean(GetValue(exprRef))が真の場合
ToNumber [spec]とToBoolean [spec]は非常に異なる結果を返す可能性があります。
注: が実際にブール値の場合、 と の間にmyVar違いはありません。if(myVar == true)if(myVar)
ええ、両方に大きな違いが if(myVar) and if(!myVar)ありますif(myVar == true) and if(myVar == false)
ではif(myVar) and if(!myVar)、!myVar はすべての「false」値 (空の文字列、0、null、false、未定義、NaN) に対して true を返します。
whileif(myVar == true)およびif(myVar == false)myVar 値が true か false かを確認します。myVar 値が NULL、NaN、または未定義の 0 の場合でも、次のように比較されます
if(NULL == true)
要約:
NOT operator'!' converts a value into its opposite boolean equivalent. This is different than actually comparing two values.
And if you compare values with '==', JavaScript does type conversion which can lead to unexpected behavior (like undefined == null).