您使用的值是一個字符串,而不是布爾值。當你寫這樣的:
console.log(!!(value));
你是值轉換爲布爾值,但是你沒有捕捉它。你轉換它並記錄下來,然後它就被扔掉了。那麼你的下一行:
console.log(typeof(value)); // string NOT Boolean
回到測試value
(串)的原始值。
三重等號檢查「類型和值相等」,因此您的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