Задать вопрос
citizentwo
@citizentwo

Почему конструкция «1 больше 1 меньше 1» в JavaScript возвращает true?

console.log(1>1<1);
true
На работе появилось немного свободного времени, начал не спеша подучивать JavaScript. Не перестаю удивляться "безграничным возможностям" этого языка!
  • Вопрос задан
  • 151 просмотр
Подписаться Средний Комментировать
Решения вопроса 2
dollar
@dollar
Делай добро и бросай его в воду.
В каждом языке программирования есть правила, которые определяют порядок выполнения операций в выражениях. Самый простой пример - умножение считается всегда раньше, чем сложение. Скобки могут менять порядок (затем они и нужны), но без скобок работают эти правила.

Чтобы их выяснить, нужно набрать в гугле "javascript precedence". Советую эту таблицу знать очень хорошо, чтобы считалось, что язык вы знаете.

Погуглив, вы выясните две вещи:
1) Операции > и < имеют одинаковый приоритет.
2) Ассоциативность "left-to-right", то есть слева направо.

Второе означает, что сначала будет посчитано левое выражение 1>1, которое false. А затем результат (false) будет посчитан с правым: false<1, где false автоматически преобразуется в 0.

В качестве тренировки посчитайте на бумажке, используя только таблицу приоритетов операций, такое выражение:
0 / 0 ^ 0 === 0 ? 'a' : 'b';
Решение и ответ, для самопроверки
0 / 0 ^ 0 === 0 ? 'a' : 'b';
0 / 0 ^ (0 === 0) ? 'a' : 'b'; // "===" has more priority than "^"
0 / 0 ^ true ? 'a' : 'b';
(0 / 0) ^ true ? 'a' : 'b'; // "/" has more priority than "^"
NaN ^ true ? 'a' : 'b';
NaN ^ 1 ? 'a' : 'b'; //converted to number
1 ? 'a' : 'b'; //for some reason
'a'
Ответ написан
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
В JS нельзя так комбинировать операторы сравнения как в паскале (UPD ошибся, паскаль выдает ошибку), т.к. первая часть выражения вернет логическое значение (true/false)
1 > 1 // false
(1 > 1) < 1 === false < 1 === 0 < 1 === true
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы