||
равно ленивый - он не будет пытаться оценить правую часть ||
левой стороны, которая считается истинной. Если бы вы сделали b || 1
вместо 1 || b
, он сначала попытался бы оценить b
, и была бы выдана ошибка:
вся левая сторона ?
интерпретируется как условие. (Другие операции, выполняемые слева от ?
, также будут проанализированы до оценки всего условия ?
.) Условный оператор имеет одно из низших операторов.
Для
1 || b ? 3 : 4
оператор с наивысшим приоритетом - ||
, в 5. Таким образом, два выражения напротив ||
оцениваются для "или" сначала:
1 || b
Так как 1 является правдой, все 1 || b
оценивается как 1
без учета b
.
1 ? 3 : 4
Затем выполняется условный оператор (приоритет 4):
true ? 3 : 4
оценивается как
3
потому что условие истинно.
Когда вы ставите круглые скобки вокруг условного:
1 || ( b ? 3 : 4 )
Круглые скобки имеют наивысший приоритет оператора , в 20 - интерпретатор знает, что все, что в скобках, будет оцениваться в одном выражении, независимо от того, что находится за скобками. Так
1 || <something>
оценивается как
1
потому что 1 правдива.