3

さて、ここに私の短い質問があります:

===and!==演算子は型を比較してから値を比較し、 ==and!=は型をキャストしてから値を比較することを知っています。

if(myVar)とはどうif(!myVar)ですか?

と の動作に違いはありif(myVar == true)ますif(myVar == false)か?

4

3 に答える 3

3

はい、違いがあります。例えば:

if('true' == true) {
    alert("This doesn't happen");
}

if('true') {
    alert("But this does happen.");
}

理由?number両方とも比較のためにsに変換されます。'true'に変換されNaNtrueに変換され1ます。

== trueこの愚かさを避け、決してまたはを書いてはいけません== false

于 2012-06-20T17:45:25.823 に答える
2

はい、違いがあります。既に述べたように、値を と比較すると==型変換が行われます。

値が同じ型でない場合、両方とも文字列または数値に変換されます。値の 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)

于 2012-06-20T17:48:39.543 に答える
1

ええ、両方に大きな違いが 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).
于 2012-06-20T17:57:04.410 に答える