2017-01-16 3 views
1

В JavaScript можно ли разместить условный оператор после оператора Or? Если да, то почему следующие неудачи для меня?Условный оператор после оператора Or в JavaScript

var value = 1 || true ? 2 : 3; // equals to 2 

Когда я устанавливаю значение будет равно [1 || true ? 2 : 3], я получаю неожиданный результат. результат, который получают в том, что:

value == 2 

Я ожидаемое значение будет равно 1 (value= = 1), так как 1 является truthy, и заявление Или должно быть возвращение 1. Условный оператор даже не предполагается для выполнения.

Единственный способ val может быть равен 2 (val == 2), если оператор Or ведет себя не так, как ожидалось, и запускает вторую часть оператора Or и условного оператора, который находится в нем.

Почему это так?

+1

Потому что это интерпретируется как '(1 || true)? 2: 3' – haim770

+0

Ох .. Я забыл о приоритете оператора. –

ответ

3

Я ожидаемое значение будет равно 1 (значение = 1), так как 1 является truthy

Чтобы получить, что вам нужно:

скобки
var value = 1 || (true ? 2 : 3); 
// --------------^------------^ 

Без них, || находится между 1 и true, а затем первым операндом оператора условного оператора является результат (1).

Это связано с тем, что || имеет более высокий приоритет, чем условный оператор (только); here's a table on MDN.

0

Потому что Logical OR имеет приоритет над оператором Conditional. Тогда ваше утверждение на самом деле интерпретируется как:

(1 || true) ? 2 : 3; 

который, очевидно, имеет значение 2.

MDN

+0

Спасибо, ребята, за быстрый ответ (: –

Смежные вопросы