逻辑AND和OR的评估顺序

时间:2013-10-11 20:06:02

标签: javascript

我在调试器手表中有两个表达式(同时):

item.isSelected() === truefalse

同时:

(item.isSelected() === true) && !(item.workflowStatusCode.toUpperCase() === "INRV") && (item.productStatusCode.toUpperCase() !== "ACTV") || (item.workflowStatusCode.toUpperCase() === "INPR")true

为什么第一个在第一个为假时评估为真?

此外:

来自here

  

短路评估

     

当逻辑表达式从左到右进行评估时,它们会被测试   使用以下规则进行可能的“短路”评估:

     

false&&任何短路评估为假。

...有点暗示一旦第一个表达式被评估为false,其余部分应该被跳过......我仍然不清楚这些规则背后的规则是什么。

2 个答案:

答案 0 :(得分:7)

|| has lower precedence than &&,所以几乎可以肯定这是true

(item.workflowStatusCode.toUpperCase() === "INPR")

答案 1 :(得分:1)

优先权可以这样看。

NOT高于AND高于OR

这意味着:

A && !B && C || D

评估如下:

( (A && (!B)) && C ) || D

评估顺序是:

  1. !B
  2. A && {1}
  3. {2} && C
  4. {3} || D
  5. 因此,如果Dtrue,则其他任何事情都不重要,表达式的评估结果为true

    顺便说一句,如果你把D ||放在开头,那么如果Dtrue,那么懒惰的评估者会忽略其余的。{/ p>