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

Why does javascript evaluate multiple AND criterias if first criteria failed

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

我有以下声明:

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

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

但我得到 "Cannot read property 'length' of undefined",这表明它不会在第一个失败的条件之后跳过。

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

更新: javascript 中的表达式求值时给出的答案是正确的。此外,我发现我在 "undefined"

的测试中犯了一个忘记 typeof 的愚蠢错误
if(typeof data.equipment_notifications != "undefined" &&    data.equipment_notifications.length > 0)

Why does javascript evaluate multiple AND criterias if first criteria failed

没有。

Is it true that javascript will evaluate the whole criteria of a statement, even if failing the first and be bound to fail the whole statement no matter the evaluation of the remaining criteria(s)?

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

这很容易向你自己证明:

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

if (a() && b()) { alert('c') }

如果 JavaScript "evaluated the whole exression",它会同时提醒 ab。但是,因为 && 的第一个操作数是 false,所以 JavaScript 不计算第二个。


But i get "Cannot read property 'length' of undefined" which indicates that it does not skip after the first failed criteria.

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