这怎么可能发生?
var X = db.getItem('ShowDeleted');
console.log(X);
if (X) {
console.log(1);
} else {
console.log(2);
}
在Firebug中,我得到了:
true
1
false
1
当我解开有问题的片段时。
编辑:我为使用db道歉。在我的例子中。分贝= localStorage的。
答案 0 :(得分:2)
我想象的事情发生了(虽然在不知道db.getItem
返回的类型的情况下真的无法判断)X
最终会成为一些非布尔值。然后,if
语句始终求值为true
,因为该变量是0
以外的某个值。也就是说,如果它返回一个字符串"false"
(或实际上是任何对象),则以下始终跟在if
分支之后,而不是else
if("false"){
//do something
} else {
//do something else
}
您需要确保实际上是在评估布尔值,而不是其他值。
答案 1 :(得分: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