【问题标题】:JavaScript If/Else Conditions & Comparisons - DifferencesJavaScript If/Else 条件和比较 - 差异
【发布时间】:2012-06-20 17:42:24
【问题描述】:

好的,这是我的简短问题:

我知道===!== 运算符将比较类型然后比较值,而==!= 将转换类型然后只比较值。

if(myVar)if(!myVar) 呢?

if(myVar == true)if(myVar == false) 的行为有什么不同吗?

【问题讨论】:

标签: javascript casting comparison boolean conditional-statements


【解决方案1】:

是的,有区别。例如:

if('true' == true) {
    alert("This doesn't happen");
}

if('true') {
    alert("But this does happen.");
}

原因?它们都转换为numbers 以进行比较。 'true' 转换为NaNtrue 转换为1

避免这种愚蠢,永远不要写== true== false

【讨论】:

    【解决方案2】:

    是的,有区别。正如您已经提到的,如果您将一个值与== 进行比较,则会发生类型转换

    如果值属于同一类型,它们都将被转换为字符串数字。如果其中一个值为 boolean 而另一个不是,则这两个值都将转换为 数字

    比较算法在section 11.9.3 of the specification 中定义。重要的步骤在这里:

    7。如果 Type(y) 为 Boolean,则返回比较结果x == ToNumber(y)

    所以true先转换为数字,然后myVar也将转换为数字。


    如果你只有if(myVar),那么the value is converted to a boolean

    2。如果ToBoolean(GetValue(exprRef)) 为真,那么


    ToNumber [spec]ToBoolean [spec] 可以返回非常不同的结果。


    注意:如果myVar实际上是一个布尔值,那么if(myVar == true)if(myVar)之间没有区别。

    【讨论】:

    • 谢谢,这是对我最好的解释。
    【解决方案3】:

    是的,if(myVar) and if(!myVar)if(myVar == true) and if(myVar == false) 有很大的不同

    if(myVar) and if(!myVar) 中,!myVar 将为每个“假”值(空字符串、0、null、假、未定义、NaN)返回真

    if(myVar == true)if(myVar == false) 检查 myVar 值是真还是假。即使 myVar 值为 NULL、NaN 或未定义的 0,它也会像

    if(NULL == true)

    总结:

    NOT operator'!' converts a value into its opposite boolean equivalent. This is different than actually comparing two values.
    And if you compare values with '==', JavaScript does type conversion which can lead to unexpected behavior (like undefined == null).
    

    【讨论】:

    • 它是否包含任何东西究竟是什么意思?
    • @FelixKling 显然是指如果是null, false, NaN, undefined, "", +0, or -0 :P
    • @FelixKling : "false" 值,即空字符串、0、null、false、未定义、NaN
    • 是的,我猜是这样的;)但是单词的选择不是很精确。很抱歉吹毛求疵。
    猜你喜欢
    • 2018-11-07
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多