-1

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

item.isSelected() === truefalse

同时:

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

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

添加:

这里

短路评估

由于逻辑表达式是从左到右评估的,因此使用以下规则测试它们是否存在可能的“短路”评估:

false && 任何东西都被短路评估为 false。

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

4

2 回答 2

7

||的优先级低于&&,因此几乎可以肯定的是true

(item.workflowStatusCode.toUpperCase() === "INPR")
于 2013-10-11T20:08:09.970 回答
2

可以这样查看优先级。

NOT高于AND高于OR

这意味着:

A && !B && C || D

像这样评估:

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

那么评估的顺序是:

  1. !B
  2. A && {1}
  3. {2} && C
  4. {3} || D

因此 ifD没有true其他问题,表达式的计算结果为true

顺便说一句,如果你把它放在D ||开头,那么懒惰的评估者会忽略其余的 if Dis true

于 2013-10-11T23:19:32.760 回答