【问题标题】:Why does javascript evaluate multiple AND criterias if first criteria failed如果第一个条件失败,为什么 javascript 会评估多个 AND 条件
【发布时间】:2016-02-15 19:00:33
【问题描述】:

即使第一个条件失败,javascript 是否真的会进一步评估为多个 AND 条件语句?

我有如下声明:

if(data.equipment_notifications != "undefined" && data.equipment_notifications.length > 0)

我假设条件在初始条件下会失败,甚至不尝试评估第二个条件,因为如果第一个条件失败(假),那么当涉及到 AND 时,整个条件将始终为假,因此它会跳过一步.

但我得到“无法读取未定义的属性'长度'”,这表明它在第一个失败的标准之后没有跳过。

问题: javascript 是否真的会评估语句的整个标准,即使第一个失败,并且无论评估剩余标准如何,都必然会失败整个语句?

更新:当涉及到 javascript 中的表达式求值时,给出的答案是正确的。此外,我发现我犯了一个愚蠢的错误,在“未定义”的测试中忘记了 typeof

if(typeof data.equipment_notifications != "undefined" &&    data.equipment_notifications.length > 0)

【问题讨论】:

    标签: javascript evaluation


    【解决方案1】:

    如果第一个条件失败,为什么 javascript 会评估多个 AND 条件

    没有。

    javascript 是否会评估语句的整个条件,即使第一个条件失败,并且无论剩余条件的评估如何,都必然会失败整个语句?

    不,这不是真的。 JavaScript 使用short-circuit evaluation

    这很容易向自己证明:

    function a() { alert('a'); return false}
    function b() { alert('b'); return true }
    
    if (a() && b()) { alert('c') }
    

    如果 JavaScript “评估整个表达式”,它会提醒 ab。但是,由于&& 的第一个操作数为假,JavaScript 不会计算第二个操作数。


    但我得到“无法读取未定义的属性'长度'”,这表明它在第一个失败的标准之后没有跳过。

    不,这根本不是这个意思。您正在测试 字符串 "undefined"undefined"undefined" 是两个截然不同的东西。

    【讨论】:

    • 你的权利..我在我的声明中发现了错误。在我的第一个标准开始时我也错过了一个 typeof .. 但是 .. 感谢您的帮助和关于 javascript 评估的启示:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2020-11-23
    • 2017-11-08
    • 1970-01-01
    • 2012-07-06
    相关资源
    最近更新 更多