boolean上的Javascript if条件
您能否解释一下,如果没有eval函数,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
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/>