さて、ここに私の短い質問があります:
===
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).