【问题标题】:javascript true and falsejavascript真假
【发布时间】:2014-10-25 18:19:54
【问题描述】:

我已经知道以下行为,但有人能告诉我为什么会这样吗?谢谢。

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

【问题讨论】:

标签: javascript if-statement operators boolean-logic


【解决方案1】:

在前两个中,您明确地将字符串与布尔常量进行比较,而字符串显然不等于两者。在第三行中,您正在测试字符串的“真实性”,并且在该上下文中任何非空字符串的计算结果为 true

在字符串和布尔值之间的比较中,Abstract Equality Comparison Algorithm 指示比较应该作为 数字 比较来执行。因此,true 被转换为 1,false 被转换为 0; "hello" 将是 NaNNaN 永远不会是 ==

【讨论】:

【解决方案2】:

truefalse 是布尔值,您正在尝试将布尔值与字符串值进行比较,因此您遇到了问题,因为条件不满足。

在第三种情况下,您没有进行比较,您只是检查true

【讨论】:

    【解决方案3】:

    您不能将字符串 ("HELLO") 与布尔值 (true) 进行比较。它们是 2 种不同的类型。最后一个警报触发是因为您没有将它与任何东西进行比较。只有当你测试空字符串时才会返回

    var foo = "Hello world!"; 
    if(foo){ 
      //if foo is not empty 
    }else{ 
      //if foo is empty
    }
    

    【讨论】:

    • 我知道“===”运算符会检查类型,而“==”不会...这就是为什么我期望 [not-empty-string] (被解释为as true) 与 [true] 比较返回 [true]
    猜你喜欢
    • 1970-01-01
    • 2016-06-09
    • 2018-07-25
    • 2012-07-17
    • 2021-04-20
    • 2015-03-30
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多