Why is !== "" is not equal to !== null
First of all, your habit is wrong. Using:
if(data !== "")
Will only check for an empty string. If data
is undefined
or null
, the if block will still execute because !==
checks for equality without performing any type conversions.
Secondly, ReSharper does not have an issue. It's trying to tell you that you may be making a mistake. if(data !== null)
will only check against null. undefined
and an empty string will still return true and cause the block to execute. ReSharper is warning you that you may be making a mistake (because rarely do you ever need to check for just null
).
Just remember that undefined !== null !== ""
. You could attempt several of the shortcuts that are being mentioned but if you really want your code to be thorough, just check all three. If you're worried about code being too long, move the check to a utility method:
function hasValue(var data) {
return (data !== undefined) && (data !== null) && (data !== "");
}
In short, a var
is null
when it's not pointing anywhere.
In the other hand, a var
equal to ""
is a defined var pointing to a variable which contains an empty string. That's essentially different.
[EDIT]
As @jfriend00 correctly points out, null
is a specific value in javascript. The difference would be then that null
is a different value than ""
, which is an empty string and therefor not null.
The correct value for a var
which is not initialized is undefined
.