2016-12-24 16 views
3

誰かがなぜこれが機能しないのか説明してもらえますか?値はtrueです。ブール値です。チェックすると、通常は(値){};のようになります。できます。なぜこれが好きではない?(値=== true)が機能しない場合

function updateRecords(value) { 

    console.log(!!(value));  // true 
    console.log(typeof(!!(value))); //boolean 

    if (value === true) { 
     alert("success"); 
     } 
} 

    updateRecords("Take a Chance on Me"); 
+2

それはブール値ではありません。あなたがtypeofを*に対して実行していた "もの"は、型キャストのためにブール値でした。それを証明するには、 "typeof(value)"をログに記録してみてください。 – wally

答えて

6

使用する値は、ブール値ではなく文字列です。

console.log(!!(value)); 

値をブール値に変換しましたが、それをキャプチャしていませんでした。あなたはそれを変換してログに記録した後、捨て去った。そして、あなたの次の行:

console.log(typeof(value)); // string NOT Boolean 

はバックvalueの元の値(文字列)をテストに行ってきました。

3重等号は「タイプと値の等価性」をチェックするため、ifテストは失敗します。

等号(==)のいずれかを削除して単純な "値の平等の型変換"をテストすると、テスト対象のテキストがtrueと同じ番号に変換されない限り、それでも機能しません(詳細については、下のリンクを参照してください)が、あなたの文字列はNaN(数字ではない)に変換され、true1に変換されるので、value == trueでもに失敗します。

等価性と型変換が一緒に機能する方法の詳細は、hereです。いずれにしても

、ブール trueに対してテストしていないこのような場合には、単にデータが存在するかどうかをテスト: if(value) numberにあなたの値を変換しようとしない、それはブールに変換しようとします。限り、あなたは空の文字列のみ空白文字で文字列を持っていないとして、それは true

function updateRecords(value) { 
 

 
    console.log(!!value);  // true 
 
    console.log(typeof value); // string 
 

 
    // Don't test against true (that's implied), just test the data. 
 
    if (value) { 
 
     alert("success"); 
 
    } 
 
} 
 

 
updateRecords("Take a Chance on Me");

かに変換され、その後、あなたのデータのキャストバージョンをキャプチャし、あなたが使用することができます===

function updateRecords(value) { 
 
    // Convert the value of "value" to a Boolean and 
 
    // store that value back in the original variable 
 
    value = !!value; 
 

 
    // Now, let's test value AFTER capturing its converted value 
 
    console.log(value);   // true 
 
    console.log(typeof value); // boolean 
 

 
    if (value === true) { 
 
     alert("success"); 
 
     } 
 
} 
 

 
updateRecords("Take a Chance on Me");

+0

あなたは '==='を忘れました! –

+1

;)ハハ! –

+0

私はそれがまだ動作しなかったビットを2倍と比較することを考えました。なぜそれが説明できますか?私は印象に残っていました!!(「私にチャンスを取る」)が真実であり、文字列はブール値と比較すると真実になります。 –

1

2番目のインスタンスではまだ型キャストしていないためです。

if (!!(value) === true) { 
    alert("success"); 
} 

以前は、チェックされた:

"Take a Chance on Me" === true  // This obviously returns false. 

上記動作するはずです。それ以外の場合は、===演算子を使用しないでください。 ==を使用する必要があります。

if (value == true) { 
    alert("success"); 
} 
0

JSは驚くべきこと(:常に明白ではない@praveenkumarエイリアスflashgordon):することができ

"" == false is true 
"1" == false is false (ok so far) 
"0" == false is true (looks weird) 
" " == false is true (wtf...) 
"\n" == false is true (wtf²) 
+0

それは良い情報ですが、質問にはあまり良い答えではありません。 –

関連する問題