我通过将“truthy” boolean 值传递给函数来在脚本中设置模式。在函数中,一个简单的 if
语句检查参数是 true
还是 false
。我有时将它作为字符串或 boolean 值传递,这一直有效,但由于某种原因,它不是这样的:
setMode: function(Setting) {
if (Setting) {
console.log('Enabling mode');
} else {
console.log('Disabling mode');
}
}
例如,当我向其传递一个字符串 'false'
并将 Setting
记录到控制台时,控制台显示 false
,但 >if
语句认为它是真的。
我必须将其添加到函数的开头才能使其正常工作:
if (typeof 设置 == '字符串') { 设置=(设置==“真”); }
它的使用示例:
var inverted = $('INPUT[name="Mode"]').prop('checked');
app.setMode(inverted);
还有另一个:
var mode = localStorage.getItem('Mode');
this.setMode(mode);
这太奇怪了,因为我已经做了这种事情很多年了,但现在才刚刚开始。也许是因为我正在使用 localStorage
和 .prop
?
最佳答案
如果您尝试记录'false'
,很明显控制台会记录false
(它是一个字符串)并且if语句看到true
,因为非空字符串是真正的 boolean 值。
如果您想检查字符串是“true”
还是“false”
,您必须使用普通运算符来完成。因此,您可以在函数的开头添加这一行:
Setting = (typeof Setting === 'string') ? Setting === "true" : Setting;
关于JavaScript IF 语句 boolean 严格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16758477/