tags:

views:

105

answers:

5

Is it possible to check for both null and undefined in javascript?

if(_var == null || _var == undefined) {

}
+2  A: 

yes

However using the == operator it is not necesary. using foo == null will also be true of foo is undefined. Note however that undefined and null or not(!) the same. It is because that == does type coersion that foo == null is also true for foo is undefined.

Pim Jager
+1, this is the shortest way to achieve it, and it is completely described in the spec: [The Abstract Equality Comparison Algorithm](http://bclary.com/2004/11/07/#a-11.9.3) (no worries about type coercion)... `if (_var == null) { ... }`
CMS
A: 

you can also use $defined function in mootools (and there must be an equivalent in jquery)

Midhat
+3  A: 

In JavaScript (pre ECMAScript 5), undefined is not a constant, but a global variable, and therefore it is possible to change its value. Therefore it would be more reliable to use the typeof operator to check for undefined:

if (typeof _var === 'undefined') { }

In addition your expression would return a ReferenceError if the variable _var is not declared. However you would still be able to test it with the typeof operator as shown above.

Therefore, you may prefer to use the following:

if (typeof _var === 'undefined' || _var === null) { }
Daniel Vassallo
Your first case is a little risky since _var might be set to some other falsy value than null.
Peter Jaric
@snowlord: True. I removed that part.
Daniel Vassallo
@Daniel, fortunately now on ECMAScript 5, `undefined` is a property of the global object which is non-writable, non-configurable (non-deletable) and non-enumerable :)
CMS
@CMS: Thanks... that's good to know.
Daniel Vassallo
A: 
if (!_var) {
    // Code here.
}

This should work since both undefined and null are type coerced to false.

Of course there is the small problem if _var is actually false but it works since in most cases you would want to know if _var is not true and not an object.

Maushu
Note that there are three other falsy values in JavaScript apart from `false`, `null` and `undefined`: An empty string `""`, `0`, and `NaN`.
Daniel Vassallo
A: 

Pim, so is this safe:

if(document.getElementById('someID')!=null) document.getElementById('someID').callSomeMethod();

I mean is that IF check enough to ensure that the callSomeMethod will be successfully invoked? (Assuming there is such a method of course.)