Why 3 > 2 > 1 gives false

Why 3 > 2 > 1 gives false

·

2 min read

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. 1 < 2 < 3 is evaluated as (1 < 2) < 3.
  2. 1 < 2 is true, making the expression true < 3.
  3. How does it compare a true against a number? It does this by first converting the boolean to a number. true is converted to 1 and false is converted to 0 (see 7.1.14 of the ECMAScript specififcation). Thus, the expression is evaluated as 1 < 3 which gives true.

Now for 3 > 2 > 1:

  1. Going left to right, 3 > 2 is evaluated first which is true. The expression becomes true > 1.
  2. To evaluate, true is converted to 1. This gives 1 > 1, which is false!

For bonus points, try figuring out 1 < 3 > 2 and 1 > 3 < 2 gives.

(originally posted on Dev.to)