2012-12-17 65 views
1

有人能解釋這裏發生了什麼嗎?我試圖使用javascript !!(雙重)運算符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/
(鉻v 23.0.1271.97 &火狐16.0.1,Mac OS X 10.8.2)

編輯 - 糾正代碼:

(以前的 '如果' 語句只是評估爲假的,從而使分支將永遠不會運行。)

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/

+1

好,'!! foo'是'FALSE',就像你說的,所以'else'分支將被採用。這是它應該如何工作的。 –

+0

在答案的評論之一,有人指出,'!!'不是運營商 - 這是兩個'!'運營商。 – AlexMA

+0

這是對變量的值進行反義的反義詞。 –

回答

1
var foo = undefined; 

foo將返回true。因爲在JavaScript中,未定義的,0,NaN,false和null都被認爲是falsey值。

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

這是預期的行爲。如果你加倍不假,你就會失敗。這個,! l是不是運營商。這個,!!,是兩個不是運營商。 double not運算符有時用於轉換爲布爾類型。

! false === true 
!! false === false