Why '3 < 2 < 1' Evaluates to True - JavaScript's Sneaky Comparison

Why '3 < 2 < 1' Evaluates to True - JavaScript's Sneaky Comparison


In the world of JavaScript, things aren't always as they seem. One peculiar quirk that often leaves developers scratching their heads is the surprising result of expressions like '3 < 2 < 1' evaluating to true. At first glance, it might seem counterintuitive, but fear not! In this blog, we'll delve into the fascinating world of JavaScript comparisons and uncover the mystery behind this seemingly illogical behaviour.

Understanding JavaScript's Type Coercion

To decipher why '3 < 2 < 1' evaluates to true, we need to grasp a fundamental concept in JavaScript type coercion. JavaScript is known for its loose typing system, where it automatically converts values to a common type to make comparisons. This can lead to unexpected outcomes when not understood correctly.

Breaking Down the Expression

Let's break down '3 < 2 < 1' step by step:

  1. First, JavaScript evaluates '3 < 2,' which returns false because 3 is not less than 2.

  2. Now, here's where it gets interesting. JavaScript takes the result of 'false' from the previous step and attempts to evaluate 'false < 1.'

The Type Coercion Twist

In this second step, JavaScript attempts to compare a boolean value ('false') with a number (1). To do this, JavaScript coerces 'false' into a number. Here's what happens:

  • 'false' is coerced to the number 0.

  • The comparison becomes '0 < 1,' which is true.

The Big Reveal

And there you have it! The reason why '3 < 2 < 1' evaluates to true is due to JavaScript's type coercion. It converts 'false' into 0 and then compares it to 1, resulting in a true statement.

Avoiding Pitfalls

While understanding this behaviour is essential for mastering JavaScript, it's also crucial to write code that is clear and free from such surprises. To avoid such pitfalls, you can use strict equality and avoid relying on implicit type coercion.


JavaScript's '3 < 2 < 1' mystery unravelled! We've delved into the world of type coercion and discovered why seemingly bizarre comparisons like this one can yield unexpected results. Armed with this knowledge, you can write more predictable and error-free JavaScript code. Happy coding!