如果没有eval函数,你能解释为什么if条件不起作用:
var myBoolean= document.getElementById("someBoolean").value; //This is a 'false'
if(myBoolean)
{
alert(Your boolean is True); //This condition always getting executed even though myBoolean is false;
}
if(eval(myBoolean))
{
alert("You will never see this alert bcoz boolean is false");
}
答案 0 :(得分:15)
在Javascript中,以下值被视为条件的false
:
false
null
undefined
''
0
NaN
其他所有内容都被视为true
。
'false'
不是上述内容,因此它是true
。
答案 1 :(得分:5)
字符串'false'
的计算结果为布尔值true
答案 2 :(得分:2)
这是因为它实际上不是布尔值,而是字符串'false'
。将字符串转换为布尔值时,''
为false
,其他任何内容为true
。
您检查它是否等于字符串'false'
(或'true'
)。
var myBoolean = 'false'; // (string)
myBoolean = myBoolean !== 'false'; //false (boolean)
答案 3 :(得分:1)
'false'== true,因为JavaScript的隐式类型强制而疯狂。查看Crockford's The Elements of JavaScript Style中的其他示例。
''=='0'//假
0 ==''// true0 =='0'// true
false =='false'// false
false =='0'// truefalse == undefined // false
false == null // falsenull == undefined // true
'\ t \ r \ n'== 0 // true
您可以通过将代码更改为
来解决此特定问题var myBoolean = document.getElementById("someBoolean").value === "true"
此外,使用几乎总是更好!!和===而不是!和==
答案 4 :(得分:0)
document.getElementById(“someBoolean”)不返回布尔值true / false它返回一个元素或者undefined / null
你可以改变你的逻辑并得到预期的结果:
if(!myBoolean)
{
alert('This element does not exist');
}
if(!eval(myBoolean))
{
alert("Do not know why you would ever want to do this");
// you could do typeof()
}
答案 5 :(得分:0)
尝试:
var myBoolean= document.getElementById("someBoolean").value; //This is a 'false'
if(myBoolean != "false")
{
alert(Your boolean is True); //This condition always getting executed even though myBoolean is false;
}
就像其他人所说的那样,字符串不是布尔值,所以使用它就好像会给你一个逻辑错误。
答案 6 :(得分:-1)
字符串是根据ECMA
的布尔真值var a = ""<br/>
a&&false //-> false<br/>
a||false //-> "" (truthy)<br/>