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

我有以下声明:

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


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

但是我得到“无法读取未定义的属性'length'的未定义”,这表明在第一个失败的条件后它不会跳过。

问题:javascript是否会评估一条语句的整个条件,即使未通过第一个条件,也必然会导致整个语句失败,而不管其余条件的评估是对的吗?

更新:对于javascript中的表达式求值,给出的答案是正确的。此外,我发现我在测试中遗忘了typeof的愚蠢错误,即“ undefined”

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

最佳答案

如果第一个条件失败,为什么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。但是,由于&&的第一个操作数为false,因此JavaScript不会评估第二个。




  但是我得到“无法读取未定义的属性'length'的未定义”,这表明在第一个失败的条件后它不会跳过。


不,这根本不代表什么。您正在测试字符串"undefined"undefined"undefined"是两个非常不同的东西。

关于javascript - 如果第一个条件失败,为什么Javascript会评估多个AND条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35417081/

10-12 12:47
查看更多