有人可以解释这里发生了什么吗?我正在尝试将javascript !!
(double-bang)运算符as described here与HTML5 local storage结合使用(我存储0和1值并测试真实性,但我还需要缺少的密钥是假的,因此在开始时未定义。
虽然在类型转换时回到控制台是假的,但它不在'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'语句只是评估为false,因此分支永远不会运行。)
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");
}
答案 0 :(得分:4)
这是预期的行为。如果你加倍而不是假,那你就是假的。这个,!
l是非运算符。这个!!
是两个非运营商。 double not运算符有时用于转换为Boolean类型。
! false === true
!! false === false
答案 1 :(得分:1)
var foo = undefined;
foo
将返回true。因为,在JavaScript“”中,undefined,0,NaN,false和null被认为是假值。
http://www.mapbender.org/JavaScript_pitfalls:_null,_false,_undefined,_NaN。
从你的代码:
var foo = undefined; //false
console.log(!!foo); // !!foo = false;
if(!!foo) { //false
console.log("It will not come because the condition fails");
}else{
console.log("Else Part");
}