DEV Community

Avoid boolean values comparison with "==" in JavaScript

Ashish Mehra on April 14, 2018

All of us use "==" daily for performing the comparison in JavaScript to execute particular code block only when certain condition meets. But do ...
Collapse
 
sirbranedamuj profile image
Zach Thacker

You should read up on JavaScript equality - it's a very important concept. Much of what you said here is correct but you didn't even touch on the === operator which is usually more acceptable to use than the flawed == operator.

developer.mozilla.org/en-US/docs/W...

Collapse
 
mehraas profile image
Ashish Mehra • Edited

Yup, the main idea was to explain the working of "==" and the reason why we should avoid boolean value comparison with "==".

Collapse
 
icatalina profile image
Ignacio Catalina

You should avoid all sort of comparisons using '=='

Thread Thread
 
mehraas profile image
Ashish Mehra

In some cases '==' is very useful. Like when we have to compare value (String)"10" with value 10(Integer).By using "==" in this case, we don't have to perform any explicit conversion.

Thread Thread
 
gsonderby profile image
Gert Sønderby

No, do the explicit conversion, then compare strictly. Otherwise you are leaving yourself open to bugs that will be hard to detect. There's literally no case where == is desirable.

Thread Thread
 
mehraas profile image
Ashish Mehra

Thanks for making the point. :-)

Thread Thread
 
staskjs profile image
Stanislav Karpov

The only case when I use == is comparing to null, that also checks for undefined. It is an extremely rare when you need to check for undefined and null independently

Thread Thread
 
mehraas profile image
Ashish Mehra • Edited

I prefer Object.is() to compare NaN and for undefined I just pass variable inside of condition because undefined is falsey value.

Thread Thread
 
icatalina profile image
Ignacio Catalina

If you need to check for undefined and null just do

if (variable === undefined || variable === null) {

if I see code doing:

if (variable == null) {

I have no way to know if you actually wanted to check only for null or null and undefined.

It is always better to be explicit.

Collapse
 
deen_john profile image
Deen John • Edited

For unequal types, "==" operator would first coerce the values to Number types

Inputs :

A =10, is number type,
B =true, is boolean type

Code: Which block will run?

if(A == true) {
console.log("if block")
} else {
console.log("else block")
}

Reasoning :

For unequal types, "==" operator would first coerce the values to Number types

"==" would do this coercion A === ToNumber(B)

ToNumber(B) ie ToNumber(true) results in 1

10 === 1 ?

Answer is : "else block" will be printed on console

developer.mozilla.org/en-US/docs/W...

Collapse
 
guneyozsan profile image
Guney Ozsan

I don't get how people code with Javascript. It's the most dangerous language I've ever seen.