DEV Community

Cover image for Difference Between == and === in JavaScript
Vijay Kumar
Vijay Kumar

Posted on

Difference Between == and === in JavaScript

The Double Equals vs Triple Equals Showdown: What's the Real Difference?

Imagine this.

You're coding a simple condition in JavaScript — maybe a login screen, maybe checking user input. You write something like:

if (value == "42") {
  // do something magical
}
Enter fullscreen mode Exit fullscreen mode

All seems good.

But then someone comes along and says, "Use triple equals (===), not double!"

Wait. What? Why? What even is the difference?

It’s a tiny little character — just one more = — but it changes everything. And today, we’re going to break this down in a way you’ll never forget. Buckle up.


⚔️ The Battle: == vs ===

Both == and === are comparison operators in JavaScript. They’re used to check equality — whether two values are the same.

But here’s the twist:

  • == is loose equality
  • === is strict equality

Sounds simple, right? But the consequences are huge.


🎭 Loose Equality (==) — The Flexible Friend

When you use ==, JavaScript tries to be helpful. If the two values are not the same type, it attempts to convert them before comparing.

Example:

0 == '0' // true
false == 0 // true
null == undefined // true
Enter fullscreen mode Exit fullscreen mode

See what's happening?

JavaScript is saying, "Oh, you're comparing a number and a string? Let me just convert that string to a number for you!"

It’s like that one friend who always tries to make things work, even if it means bending the rules.

But this flexibility? It can be dangerous.


🧱 Strict Equality (===) — The No-Nonsense One

Triple equals is a strict type checker.

It says:

"Don’t even think about comparing me to something of a different type."

Example:

0 === '0' // false
false === 0 // false
null === undefined // false
Enter fullscreen mode Exit fullscreen mode

See that? No conversions. No compromises. You compare a number to a string? Not equal. Period.

Strict equality checks for:

  • Same type
  • Same value

Nothing less. Nothing more.


🕵️ Why Does This Matter in Real Code?

You might wonder — who cares? They both check equality, right?

Well, here’s where things get real.

Let’s say you’re checking if a form field is empty:

if (inputValue == false) {
  // assume empty
}
Enter fullscreen mode Exit fullscreen mode

What if the user enters "0" (a string)? Or just types a space?

With ==, "0" and even [] or null might be loosely treated as falsey values. That could result in false positives — things being marked empty when they’re not.

Using === forces you to define your logic more precisely:

if (inputValue === "") {
  // now we’re clear: it must be an empty string
}
Enter fullscreen mode Exit fullscreen mode

Cleaner. Safer. Predictable.


🎯 Rule of Thumb

Always use === unless you have a very specific reason to use ==.

In modern JavaScript development, you’ll rarely see == in production code — and for good reason. Loose equality is a relic from the earlier days of JavaScript trying to be overly forgiving.

But now? We’ve grown. We want control. We want predictability.


🧠 Bonus: A Mind-Bending Example

Here’s a riddle for you:

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

Why? Because:

  • [] is an object
  • == converts it to a primitive (''), then to number (0)
  • false is also 0 → so it returns true

Mind. Blown.


🔚 The Final Word

That tiny third = is not just a symbol — it’s a declaration. It says:

“I know what I’m comparing. I want to be sure.”

So next time you reach for the == out of habit… pause.

Ask yourself: Do I want JavaScript to “guess” what I mean? Or do I want it to follow my instructions exactly?

In most cases, the answer is clear: Go strict. Go triple. Go ===.

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.