您使用的值是一个字符串,而不是布尔值。当你写这样的:
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