Recently, I saw this question about how does Javascript evaluate an expression:
So, why does 1 < 2 < 3
give true
, but 3 > 2 > 1
give false
? According to operator precedence and associativity, they are evaluated from left to right. So...
1 < 2 < 3
is evaluated as(1 < 2) < 3
.1 < 2
istrue
, making the expressiontrue < 3
.- How does it compare a
true
against a number? It does this by first converting the boolean to a number.true
is converted to1
andfalse
is converted to0
(see 7.1.14 of the ECMAScript specififcation). Thus, the expression is evaluated as1 < 3
which givestrue
.
Now for 3 > 2 > 1
:
- Going left to right,
3 > 2
is evaluated first which istrue
. The expression becomestrue > 1
. - To evaluate,
true
is converted to1
. This gives1 > 1
, which isfalse
!
For bonus points, try figuring out 1 < 3 > 2
and 1 > 3 < 2
gives.
(originally posted on Dev.to)