Many beginners (and even some more advanced developers) run into this very common case in software development.
We want to execute some code only if a variable has a value.
There are two ways to write this check:
if (data) {
// do something
}
and
if (!!data) {
// do something
}
Both are correct ✅ and will give the same result.
The difference is style and intention.
✨ if (data)
This is the cleanest and most idiomatic way.
JavaScript automatically converts the value to true or false.
It’s simple, short and very readable.
🔍 if (!!data)
Here we force an explicit conversion to boolean.
Maybe a bit more descriptive, since it shows that we definitely want a true/false value.
👉 But inside an if statement this is redundant – because if already does that conversion for us.
⚡ Performance?
Let’s be honest. These two will always give the same result.
And even if there was some micro difference in performance, it’s negligible – you’ll never notice it, even inside loops.
So in practice, the shorter if (data) is the more elegant one. But is it only about syntax? 🤔
🧩 Falsy values explained
When I see someone using !! in an if, I sometimes wonder if they really understand type coercion and falsy values in JavaScript.
Falsy values are those that, in a logical context (if, &&, ||, !, Boolean()), always evaluate to false.
Here’s the full list (there are only 8 of them! 🎯):
false
0
-0 (negative zero)
0n (BigInt zero)
"" (empty string)
null
undefined
NaN
Everything else is truthy — it becomes true when converted to boolean.
⚖️ Examples
"0" // truthy (string, not number 0)
"false" // truthy (string, not boolean false)
[] // truthy (empty array is still an object)
{} // truthy (empty object too)
function() {} // truthy
✅ Conclusion
If you learn this list of falsy values, you’ll probably start to feel that the simpler if (data) is more elegant ✨.
And even if you still like the !!
style, at least you’ll be using it consciously, not out of confusion.
💡 Bonus: When !!
actually makes sense
The !!
operator is not useless! It shines when you need to explicitly store or return a boolean value:
const isActive = !!data;
In this case, it’s perfectly fine and very clear ✅.
🚀 Thanks for reading! Hopefully now you won’t overuse !!
in your ifs 😉
Top comments (0)