Over a large project I do a lot of exception handling by explicitly checking whether a variable has been set using typeof. It's a bit verbose and I'd like to change my habit to a simple truthy:
if (myVar) {//do stuff}
In the snippet below and in some other tests they appear to be equivalent. Before I doing sweeping code changes however (and replace hundreds of these) I'd like to confirm they're logically equivalent and learn about any edge cases that might get me.
//What I have been doing
let myVar;
{
//other code that may or may not be able to give myVar a value
}
if (typeof(myVar) != "undefined"){
console.log("the value has been set, do more stuff");
} else {
console.log("the value was not set, handle the exception path");
}
//What I'd like to do
if (myVar) {
console.log("the value has been set, do more stuff");
} else {
console.log("the value was not set, handle the exception path");
}
This:
will return false on all falsy values, like empty string (
""), zero (0),false,null, and of course,undefined.If you do not expect any of the above values to pass through your
ifstatement, then yes, it is logically equivalent.But, I would say that this is a bold statement that none of your
ifstatements will contain0or"". These are common values.If you want to cleanup this code and continue to only check for
undefined, then you can skip the typecheck and just check with: