2011-12-06 36 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 
} 

你需要确保你实际上评估一个布尔值,没有其他价值。