DEV Community

Cover image for JavaScript’s Weirdest Comparison
TwisterRL
TwisterRL

Posted on

JavaScript’s Weirdest Comparison

[] == false        // true
[] == ![]          // true
Enter fullscreen mode Exit fullscreen mode

Wait… what? 🤯

How can an empty array be equal to false?


Let’s break it down

JavaScript’s == operator performs type coercion.

That means it tries to convert values to the same type before comparing them.

Step 1

[] == false
Enter fullscreen mode Exit fullscreen mode
  • false becomes 0
  • [] becomes "" (empty string)
  • "" becomes 0

So we end up with:

0 == 0  // true
Enter fullscreen mode Exit fullscreen mode

Step 2

[] == ![]
Enter fullscreen mode Exit fullscreen mode

First evaluate ![]:

  • [] is truthy
  • ![] becomes false

So now we have:

[] == false
Enter fullscreen mode Exit fullscreen mode

Which we already know is:

true
Enter fullscreen mode Exit fullscreen mode

Why this matters

The == operator can lead to unexpected results because of implicit type conversion.

That’s why most developers prefer:

===
Enter fullscreen mode Exit fullscreen mode

It compares values without coercion.


Takeaway

JavaScript doesn’t behave randomly.
It follows rules — even strange ones.

Understand coercion, and the weirdness disappears.

Happy coding ✨

Top comments (0)