有人可以解释这里发生了什么吗?我正在尝试将此处描述!!
的 javascript (double-bang) 运算符与HTML5 本地存储结合使用(我正在存储 0 和 1 值并测试真实性,但我还需要一个缺失的键为假,因此开始时未定义。
尽管在类型转换时它会在控制台中回显为 false,但它不在“if”语句中。
var foo = undefined;
// outputs undefined
console.log(foo)
// typecast to non-inverted boolean
console.log(!!foo);
if (!!foo) {
console.log("If was false before, why won't this execute?");
} else {
console.log("It didn't work");
}
产生:
undefined
false
It didn't work
http://jsfiddle.net/YAAA7/
(Chrome v 23.0.1271.97 & Firefox 16.0.1, OS X 10.8.2)
编辑 - 更正的代码:
(之前的“if”语句只是评估为假,因此该分支永远不会运行。)
var foo = false;
// outputs undefined
console.log(foo)
// typecast to non-inverted boolean
console.log(!!foo);
if (!!foo == false) {
console.log("Matches for foo undefined, foo = 0 and foo = false");
} else {
console.log("Matches for foo = 1 and foo = true");
}