我已经知道以下行为,但是有人可以告诉我为什么会这样吗?感谢。
if("hello"==true)alert("it's true!"); //-> does not fire the alert
if("hello"==false)alert("it's true!"); //-> does not fire the alert
if("hello")alert("it's true!"); //-> fires the alert
答案 0 :(得分:4)
在前两个中,您明确地将字符串与布尔常量进行比较,并且字符串显然不等于任何一个。在第三行,您正在测试"真实性"字符串,并且任何非空字符串在该上下文中计算为true
。
在字符串和布尔值之间进行比较时,Abstract Equality Comparison Algorithm表示比较应该作为数字比较来执行。因此true
转换为1,false
转换为0; "hello"
将为NaN
。 <{1}}永远不会NaN
。
答案 1 :(得分:1)
true
和false
是布尔值,您试图将布尔值与字符串值进行比较,因此您将面临问题,因为条件不满意。
在第三种情况下,你不是在比较你只是检查true
答案 2 :(得分:1)
您不能将字符串(&#34; HELLO&#34;)与布尔值(true)进行比较。它们有两种不同的类型。最后一个警报触发因为您没有将它与任何内容进行比较。只有在您测试空字符串
时才会返回var foo = "Hello world!";
if(foo){
//if foo is not empty
}else{
//if foo is empty
}