我在调试器手表中有两个表达式(同时):
item.isSelected() === true
:false
同时:
(item.isSelected() === true) && !(item.workflowStatusCode.toUpperCase() === "INRV") && (item.productStatusCode.toUpperCase() !== "ACTV") || (item.workflowStatusCode.toUpperCase() === "INPR")
:true
为什么第一个在第一个为假时评估为真?
此外:
来自here
短路评估
当逻辑表达式从左到右进行评估时,它们会被测试 使用以下规则进行可能的“短路”评估:
false&&任何短路评估为假。
...有点暗示一旦第一个表达式被评估为false
,其余部分应该被跳过......我仍然不清楚这些规则背后的规则是什么。
答案 0 :(得分:7)
||
has lower precedence than &&
,所以几乎可以肯定这是true
:
(item.workflowStatusCode.toUpperCase() === "INPR")
答案 1 :(得分:1)
优先权可以这样看。
NOT
高于AND
高于OR
这意味着:
A && !B && C || D
评估如下:
( (A && (!B)) && C ) || D
评估顺序是:
!B
A && {1}
{2} && C
{3} || D
因此,如果D
为true
,则其他任何事情都不重要,表达式的评估结果为true
。
顺便说一句,如果你把D ||
放在开头,那么如果D
是true
,那么懒惰的评估者会忽略其余的。{/ p>