DEV Community

Discussion on: Is there a reason to use == over ===?

Collapse
 
faaktap profile image
Fakie Tap

I still use javascript and not typescript.
I'm quite happy to use == everywhere in my code.
=== would be good if you use typescript and are sure of all your types.

Collapse
 
mellen profile image
Matt Ellen-Tsivintzeli

I'm not sure this reasoning is sound.

TypeScript gives you type notation, so you know what types your variables are. Thus === should be redundant, because you shouldn't need to type check.

With JavaScript types are not as obvious. Comparing with == is error prone because it will try to coerce your variables to be the same type, whereas with === it won't. Sometimes in JS types matter, so using === is preferable so you don't end up assigning a string to a number or vice versa.

Collapse
 
faaktap profile image
Fakie Tap

In javascript I want to compare 4 == "4" and get true.
In typescript you should get and error before compile if you try to compare 4 == "4" I guess...

When I saw the === the first time, I thought it was for "deep" comparison of objects :-)
ie: {a:1, b:2} === {b:2, a:1} should be true.

So I guess we still have no answer why to use === rather than == in everyday JS code.
I've never had a reason to say "types does matter" - mysql and json is happy saving a string to a number and vice versa. Displaying entry fields or text in html as well.

I guess in a accounting environment maybe? Negatives, decimals, power of 10, etc.. You would want to make 100% sure you have a number, and if user type 10e2.123 you would need to convert to 1000.12 before saving?

I see I use parseInt if I want to add numbers.
ie:
return this.meritList.reduce( (accum,item) => accum + parseInt(item.point),0)

And that's about it.

Thread Thread
 
mellen profile image
Matt Ellen-Tsivintzeli

The question was why to ever use == rather than the ===.

You're saying you never use === in JavaScript? Do you not fall foul of the problem where 3+3 is not the same as '3'+3? Or that '0' == 0 but 0 == false and '0' == true?

Thread Thread
 
faaktap profile image
Fakie Tap

I did a quick grep - and I see there is some place where I use ===

if (!response.constructor === Array)
if (this.photoPath === undefined)

But I use == much more frequently
Never realised that 0 == false and '0' == true - that is a nasty one.

But I've never when debugging, had an error related to == vs ===
Lucky or dumb, or dumb luck I guess?