boolean上的Javascript if条件

boolean上的Javascript if条件,javascript,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(myB

您能否解释一下,如果没有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");
}

字符串
'false'
的计算结果为布尔值
true

这是因为它实际上不是布尔值,而是字符串
'false'
的一个值。将字符串转换为布尔值时,
'
false
,其他任何内容均为
true

检查它是否等于字符串
'false'
(或
'true'

getElementById(“someBoolean”)不返回布尔值true/false,而是返回元素或未定义的/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() 
    }

'false'==true,由于JavaScript的隐式类型强制,这已经够疯狂了。从中查看这些其他示例

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

0=='0'//真

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

false==未定义//false
false==null//false

null==未定义 //真的

'\t\r\n'==0//true

您可以通过将代码更改为

var myBoolean = document.getElementById("someBoolean").value === "true"
而且,它几乎总是更好地使用!!和===而不是!和==

尝试:

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;
}

正如其他人所说,字符串不是布尔值,因此如果将其当作布尔值使用,则会出现逻辑错误。

在Javascript中,以下值被视为条件值的
false

  • false
  • null
  • 未定义
  • 空字符串
    '
  • 数字
    0
  • 编号
    NaN
其他所有内容都被视为
true


'false'
不是上述任何一种,因此它是
true

根据ECMA,字符串是布尔真值

var a = ""<br/>
a&&false //-> false<br/>
a||false //-> "" (truthy)<br/>
var a=”“
a&&false/->false
a | | false/->“”(truthy)

document.getElementById(“someBoolean”)是如何编写的返回
'false'
?您好,这是一个输入字段,值为false。
document.getElementById(“someBoolean”)
返回DOM元素(或
null
)。要获取该值,必须执行
document.getElementById(“someBoolean”).value
.document.getElementById(“someBoolean”)不会返回'false',如果该元素存在于返回该元素且其计算结果为的html中true@user1052591:JavaScript中的字符串将转换为
true
,除非它们为空(
'
)。@TimWickstrom.com:它的计算结果为
字符串
'false'
。他得到的是元素的值,而不是元素本身。看,他用的是
.value
,但他应该用
.val()
来代替。@JZ11问题已经更新了,原来的问题没有
.value
@Davy8我没看到它被编辑过。不管怎样,他的评论说他期待字符串
'false'
。如果我更仔细的话,我会告诉他使用
.val()
,但不管怎样,问题的关键是非空字符串的计算结果是布尔值
true
var myBoolean=document.getElementById(“someBoolean”);将永远不会将“false”作为字符串或布尔值false。它将===null或true,因为它将作为dom求值element@TimWickstrom.com:是的,我意识到了这一点,这就是为什么我改变了我的答案,并向OP指出了它。问题被更新了,所以这个答案不再相关。嗨,Alex,所以做这个评估(myBoolean)是正确的,或者有一个最佳/更好的解决方案。正如我在回答中所说的,我将使用var myBoolean=document.getElementById(“someBoolean”)。value==“true”或一些变体。讨论开始4年后,可能意味着ECMA/JavaScript版本和语言规则发生了变化,但空字符串truthy?我阅读了这个问题并接受了答案,因为有一个错误的概念是从可变名称开始的,就像在一些编程语言中一样,字符串
'false'
在布尔上下文中被认为是真值
which&&false
应该始终为false,而不管
将什么带到表中,是的,
的有效值可能是
,但我会将其理解为布尔上下文中的“false”。这个答案没有提供其他问题答案已经提供的任何内容。
var a = ""<br/>
a&&false //-> false<br/>
a||false //-> "" (truthy)<br/>