DEV Community

Kah
Kah

Posted on

Why 3 > 2 > 1 gives false

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.

Answers:
For 1 < 3 > 2:
  1. 1 < 3 is true, so it becomes true > 2.
  2. true is converted to 1, so it becomes 1 > 2, which is false.

For 1 > 3 < 2:

  1. 1 > 3 is false, so it becomes false < 2.
  2. false is converted to 0, so it becomes 0 < 2, which is true.

Top comments (0)