有人能解釋這裏發生了什麼嗎?我試圖使用javascript !!
(雙重)運算符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/
(鉻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");
}
好,'!! foo'是'FALSE',就像你說的,所以'else'分支將被採用。這是它應該如何工作的。 –
在答案的評論之一,有人指出,'!!'不是運營商 - 這是兩個'!'運營商。 – AlexMA
這是對變量的值進行反義的反義詞。 –