I'm wallowing in ES2015+ luxury with a few projects right now and am wondering whether I can get rid of the much hated crutch to check for undefined
in the new wonderland.
Is there a shorter but still exact way to typeof varName === 'undefined'
in ES2015+ already?
Of course I could use default parameters but this also feels like an unnecessary assignment.
function coolFn(a = null){
if (a===null) console.log("no a supplied");
}
The only case where
typeof varName === 'undefined'
is useful is when you don't know whether the variablevarName
has been declared.And IMO if you don't know whether your variables are declared, your code has serious problems.
In other cases you have better options:
varName === void 0
This will detect whether
varName
is undefined.void
is an operator which receives an argument (you can use whatever instead of0
), and returns undefined.varName === undefined
This should detect whether
varName
is undefined.However, be aware the global
undefined
could have been overwritten (before ES5) or shadowed with another value. Therefore I prefervoid
, which is also shorter.varName == null
This will detect whether
varName
is undefined or is null.!varName
This will detect whether
varName
is falsy (undefined, null, 0, empty string, NaN, false).Just check for
varName === undefined
.In older browsers it was possible to assign an alternate value to the global
undefined
variable causing that test to fail, but in ES2015+ that's now impossible.Note that there's no way to distinguish explicitly passing
undefined
as a parameter from leaving the parameter out altogether other than by looking atarguments.length
.