如果条件在布尔值上的Javascript

时间:2011-12-01 22:47:35

标签: javascript

如果没有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");
}

7 个答案:

答案 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 ==''// true

     

0 =='0'// true

     

false =='false'// false
  false =='0'// true

     

false == undefined // false
  false == null // false

     

null == 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/>