We are frequently using the following code pattern in our JavaScript code
if (typeof(some_variable) != 'undefined' && some_variable != null)
{
// Do something with some_variable
}
Is there a less verbose way of checking that has the same effect?
According to some forums and literature saying simply the following should have the same effect.
if (some_variable)
{
// Do something with some_variable
}
Unfortunately, Firebug evaluates such a statement as error on runtime when some_variable
is undefined, whereas the first one is just fine for it. Is this only an (unwanted) behavior of Firebug or is there really some difference between those two ways?
You have to differentiate between cases:
undefined
or undeclared. You'll get an error if you access an undeclared variable in any context other than typeof
.if(typeof someUndeclaredVar == whatever) // works
if(someUndeclaredVar) // throws error
A variable that has been declared but not initialized is undefined
.
let foo;
if (foo) //evaluates to false because foo === undefined
Undefined properties , like someExistingObj.someUndefProperty
. An undefined property doesn't yield an error and simply returns undefined
, which, when converted to a boolean, evaluates to false
. So, if you don't care about
0
and false
, using if(obj.undefProp)
is ok. There's a common idiom based on this fact:
value = obj.prop || defaultValue
which means "if obj
has the property prop
, assign it to value
, otherwise assign the default value defautValue
".
Some people consider this behavior confusing, arguing that it leads to hard-to-find errors and recommend using the in
operator instead
value = ('prop' in obj) ? obj.prop : defaultValue