Почему конструкция «1 больше 1 меньше 1» в JavaScript возвращает true?
В каждом языке программирования есть правила, которые определяют порядок выполнения операций в выражениях. Самый простой пример - умножение считается всегда раньше, чем сложение. Скобки могут менять порядок (затем они и нужны), но без скобок работают эти правила.
Чтобы их выяснить, нужно набрать в гугле "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'
В JS нельзя так комбинировать операторы сравнения как в паскале (UPD ошибся, паскаль выдает ошибку), т.к. первая часть выражения вернет логическое значение (true/false)1 > 1 // false
(1 > 1) < 1 === false < 1 === 0 < 1 === true