2011-12-06 37 views
0

這怎麼可能發生?我不明白如何在JavaScript中編寫IF/THEN語句?

var X = db.getItem('ShowDeleted'); 
console.log(X); 
if (X) { 
    console.log(1); 
} else { 
    console.log(2); 
} 

在Firebug中,我越來越:

true 
1 
false 
1 

正如我火有問題的片段。

編輯:我很抱歉使用db。在我的例子中。分貝= localStorage的。

+3

顯示您的行爲怪異,它_can't_發生。在你提供的內容中甚至沒有4個'console.log'調用。 –

+1

變量* x *的類型是什麼? – MilkyWayJoe

+3

似乎這是運行兩次。你的語法是正確的。 –

回答

1

正如ghik指出的,您的X值可能會作爲字符串返回。 Here是的jsfiddle腳本時設置爲一個布爾值,正常工作,而當設置爲根據您所顯示的代碼串

//boolean version 
var X =true; 
console.log(X); 
if (X) { 
    console.log(1); 
} else { 
    console.log(2); 
} 
var X =false; 
console.log(X); 
if (X) { 
    console.log(1); 
} else { 
    console.log(2); 
} 
//outputs 
true 
1 
false 
2 


//String version 
var X ='true'; 
console.log(X); 
if (X) { 
    console.log(1); 
} else { 
    console.log(2); 
} 
var X ='false'; 
console.log(X); 
if (X) { 
    console.log(1); 
} else { 
    console.log(2); 
} 
//outputs 
true 
1 
false 
1 
+0

db = localStorage。謝謝你給我看! –

2

我想象的是發生了什麼(儘管如果不知道db.getItem返回的是什麼類型,真的不可能知道)是X最終成爲一些非布爾值。那麼if語句總是計算爲true,因爲該變量是0以外的某個值。也就是說,如果它返回一個字符串"false"(或真的爲此事的任何對象)下始終遵循if分支,而不是else

if("false"){ 
    //do something 
} else { 
    //do something else 
} 

你需要確保你實際上評估一個布爾值,沒有其他價值。