Что за false?
Почему в JavaScript выражение 3 > 2 > 1 возвращает ложь
Уже давно не секрет, что в результате слабой типизации и достаточно вольного приведения данных различных типов JavaScript иногда странно интерпретирует некоторые выражения.
Сегодня мы разберем, почему 1 < 2 < 3
возвращает true
, а 3 > 2 > 1
возвращает false
.
Согласно существующим приоритетам и ассоциативности операторов, операторы с одинаковым приоритетом будут выполняться слева направо.
А значит…
-
1 < 2 < 3
эквивалентен(1 < 2) < 3
, -
1 < 2
вернетtrue
и получится выражениеtrue < 3
, - возникает вопрос - какому числу соответствует
true
. Вспомним, как происходит приведение логических значений: согласно спецификации ECMAScript 7.1.14true
преобразуется в1
,false
преобразуется в0
, - таким образом, выражение
1 < 2 < 3
превратилось в1 < 3
, а это соответствует логическому значениюtrue
.
Перейдем к выражению 3 > 2 >1
:
-
3 > 2
возвращаетtrue
, - получается выражение
true > 1
, - после приведения логической истины к
1
получим выражение1 > 1
, -
1 > 1
соответствует логическомуfalse
.
Теперь мы поняли, почему в JavaScript выражение 3 > 2 > 1
возвращает false
.
Спасибо за внимание.