JavaScript IF语句boolean strict

时间:2013-05-26 10:47:24

标签: javascript jquery html5 if-statement boolean

我通过传递一个" truthy"来在脚本中设置一个模式。 boolean函数。在函数中,一个简单的if语句检查参数是true还是false。我有时将它作为一个字符串或一直使用的bool传递,但由于某种原因它不是为了这个:

setMode: function(Setting) {    
    if (Setting) {
        console.log('Enabling mode');
    } else {
        console.log('Disabling mode');
    }
}

例如,当我将字符串'false'和日志Setting传递给控制台时,控制台会显示false,但if语句认为它是真的

我必须将它添加到函数的开头才能工作:

if(typeof Setting ==' string'){     设置=(设置=="真"); }

使用它的一个例子:

var inverted = $('INPUT[name="Mode"]').prop('checked');
app.setMode(inverted);

和另一个:

var mode = localStorage.getItem('Mode');
this.setMode(mode);

这很奇怪,因为我已经做了很多年这类事情但它现在才开始。也许是因为我正在使用localStorage.prop

3 个答案:

答案 0 :(得分:2)

如果您尝试记录'false',显然控制台记录false(它是一个字符串)并且if语句看到true,因为非空字符串是true布尔值。

如果要检查字符串是"true"还是"false",则必须使用普通运算符。所以你可以在函数的开头添加这一行:

Setting = (typeof Setting === 'string') ? Setting === "true" : Setting;

答案 1 :(得分:2)

回答有关字符串到布尔转换的问题:

ECMA规范:

  

如果参数为空String(其长度为零),则[转换]的结果为false;   否则结果是真的。

所以是的,如果你传递字符串“false”,它将被转换为true,这意味着你唯一的选择是手动检查字符串“true”或“false”并进行转换你自己。

但是,jQuery函数.prop("checked")应该返回一个布尔值(如果未定义属性,则返回undefined)。所以我会说你应该能够真正做到

if (elem.prop("checked"))

喜欢here

答案 2 :(得分:1)

  

例如,当我传递一个字符串'false'并将其记录到控制台时,控制台会显示false,但if语句认为它是真的。

控制台输出令人困惑,它隐藏了引号并为字符串false和布尔"false"记录false。然而,这两个并不相同,字符串不是空的,实际上是真的。

  

也许是因为我使用的是localStorage和.prop?

是。 .checked属性返回一个布尔值,一切正常。相比之下,local storage only stores strings,当你传入一个布尔值时,你会得到它的字符串化。您可以使用

撤消该操作
var modeStr = localStorage.getItem('Mode');
var mode = JSON.parse(modeStr);
this.setMode(mode);