Не то, чтобы я хотел пойти против большинства, но приоритет ||
не является причиной наблюдаемого поведения, а приоритета круглых скобок. Конструкция logical or expression '?' expression ':' conditional expression
не намного больше, чем слегка ограниченная IF '(' expression ')' statement ELSE statement
, когда-то, когда память была измерена в килобайтах, разница между полностью оптимизирующим запуском компилятора и одним без него измерялась в часах, а мониторы имели 50 строк с 80 символами, если вам повезло - реализовано, чтобы сделать вещи проще и меньше для компьютера и компилятора. Не пользователь.
Так что, если вы не используете ?:;
вы не нужны никакие if
, не круглые скобки выражения после if
, и не фигурные скобки, если у вас есть более чем одну строку после if
. Отсутствие необходимости в круглых скобках, по моему скромному опыту, является причиной большинства, ну, давайте называть их раздражениями.
Чтобы перевести проблему в нечто более читаемым:
var a;
if(true || true){
a = 'foo';
} else {
a = 'bar';
}
Второй кидает ошибку из-за его неправильного синтаксиса вместо того, чтобы позволить вам почесать голову:
var a;
if(true || if(true){a='foo';}else{a='bar';})/*noop*/;
Преимущество Конструкция ?:;
- это ее способность заполнить правую часть декларации. Первый пример может быть легко уменьшена до:
a = true || true ? 'foo' : 'bar';
Я нахожу его более читаемым, если вы добавите скобки, несмотря на то излишними:
a = (true || true) ? 'foo' : 'bar';
Но это, вероятно, больше вопрос личного вкуса.