if语句中的布尔运算符不起作用

时间:2012-12-17 19:05:25

标签: javascript

有人可以解释这里发生了什么吗?我正在尝试将javascript !!(double-bang)运算符as described hereHTML5 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");
}​

http://jsfiddle.net/YAAA7/1/

2 个答案:

答案 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");
 }