@Barrakuda74

Почему при if (6 || 5 && (x = 1)) переменная x не равна единице?

var x = 0
if (6 || 5 && (x = 1)) document.write(x); // 0

На сколько я знаю, у оператора '&&' приоритет больше, чем у '||'.
Однако правый операнд не выполняется, почему?

PS: вопрос решён. Чтобы понять ответ, читайте, пожалуйста, комментарии к решению. Скобки здесь не при чём (и приоритет операторов тоже).
  • Вопрос задан
  • 1299 просмотров
Решения вопроса 1
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
потому что, фактически, ваше выражение выглядит вот таким образом:
var x = 0
if (6 || (5 && (x = 1))) document.write(x); // 0

логический оператор || работает следующим образом: если первый операнд можно привести к true, остальная часть выражения не вычисляется.

https://tc39.github.io/ecma262/#sec-binary-logical...
вторая часть п.12.13.3 касается как раз указанного в начале обсуждения случая.
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
@imhuman
6 привелось к true, оставшаяся часть выражения просто проигнорировалась, как невлияющая на результат
Ответ написан
@kacheleff
fullstack developer
интерпретатор js сначала расставляет скобки, согласно приоритету операторов, а потом уже вычисляет выражения. получилось, что скобки расставились вот так (6 || (5 && (x = 1))) , а потом уже интерпретатор понял, что правую часть || выполнять не нужно
Ответ написан
@kttotto
пофиг на чем писать
Может потому что Вы х не сравниваете с 1, а присваиваете единицу иксу?
Ответ написан
@GreatRash
Бесят эти синтетические вопросы с собеседований...
Потому что, для начала человека, который пишет такой код, нужно линейкой по рукам бить.
Ответ написан
goszowski
@goszowski
PHP Developer
Это тоже самое что написать if(6) {}
Если первая часть условия возвращает что-нибуть, тогда другая игнорируется.
Чтобы проверялась также вторая часть условия нужно либо 6 с чем-то сравнивать, либо вместо || (или) написать && (и)
Ответ написан
Комментировать
nelolka
@nelolka
а он просто дальше 6 не пошел, ибо привел ее к true
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы