我一直认为使用条件布尔运算符(也称为短路)而不是常规布尔运算符不会影响表达式的结果。
var result = true | false & false;
有相同的结果
var result = true || false && false
两个表达式都导致true
.
但是,如果我将常规运算符和条件运算符混合使用会怎样?
var result1 = true || false & false;
var result2 = true | false && false;
你会期待什么?我希望这些仍然会返回true
。但事实并非如此。结果2会false
!
我知道这是因为运算符优先级。优先顺序是& | && ||
。这对我来说似乎违反直觉。我期望 的顺序& && | ||
,在这种情况下,所有结果都是相同的(我认为)。
所以我想我真正的问题不是短路是否会改变结果。问题是为什么优先顺序是这样的,短路可以改变结果。