使用する値は、ブール値ではなく文字列です。
console.log(!!(value));
値をブール値に変換しましたが、それをキャプチャしていませんでした。あなたはそれを変換してログに記録した後、捨て去った。そして、あなたの次の行:
console.log(typeof(value)); // string NOT Boolean
はバックvalue
の元の値(文字列)をテストに行ってきました。
3重等号は「タイプと値の等価性」をチェックするため、if
テストは失敗します。
等号(==
)のいずれかを削除して単純な "値の平等の型変換"をテストすると、テスト対象のテキストがtrue
と同じ番号に変換されない限り、それでも機能しません(詳細については、下のリンクを参照してください)が、あなたの文字列はNaN
(数字ではない)に変換され、true
は1
に変換されるので、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");
それはブール値ではありません。あなたがtypeofを*に対して実行していた "もの"は、型キャストのためにブール値でした。それを証明するには、 "typeof(value)"をログに記録してみてください。 – wally