Я всегда считал, что использование условных логических операторов (так называемых коротких замыканий) вместо обычных логических операторов не влияет на результат выражения.
var result = true | false & false;
имеет тот же результат, что и
var result = true || false && false
Оба выражения приводят к true
.
Но что, если бы я смешал обычные и условные операторы?
var result1 = true || false & false;
var result2 = true | false && false;
Чего бы вы ожидали? Я ожидал, что они все равно вернут true
. Но это не так. Результат2 будет false
!
Я знаю, что это из-за приоритета оператора < / а>. Порядок приоритета - & | && ||
. Мне это кажется нелогичным. Я бы ожидал порядка & && | ||
, и в этом случае все результаты будут одинаковыми (я думаю).
Так что я полагаю, что мой настоящий вопрос не в том, может ли короткое замыкание изменить результат. Возникает вопрос, почему порядок приоритета таков, что короткое замыкание может изменить результат.