In this article, we'll look at different ways of checking undefined
values in JavaScript, along with a comparison to allow you to choose the best method for your project.
Checking undefined
With Strict Equals
The primitive undefined
value is represented by the global undefined
property. With it, you could quite simply do:
let variable; if (variable === undefined) { // ... }
People argue against this, suggesting that the value of undefined
can be reassigned by direct assignment. For example:
undefined = 'foo';
While the argument holds true for older browsers, this behavior was fixed in the ECMAScript 5 specification for undefined. Therefore, in modern browsers the value of undefined
cannot be reassigned and should be safe to use.
If your concern is about supporting older browsers, even then this should be fine for the most part as there's no real need in a real-world application to reassign the value of undefined
. However, you could also consider using other methods described in this article.
Please note that for variables that are not declared previously, using this method would throw a ReferenceError
.
Checking undefined
With void(0)
By definition, the void
operator evaluates a given expression and returns undefined
. Therefore, to check for undefined
in a backward compatible manner we can simply do:
let variable; if (variable === void(0)) { // ... }
It is a common practice to use void(0)
, to obtain the undefined
primitive value. This could be especially useful in cases where you believe window.undefined
could be, or may have been, overwritten.
Both, void(0)
and void 0
, are equivalent.
Please note that for variables that are not declared previously, using this method would throw a ReferenceError
.
Using typeof
Another good way of checking for undefined
values is to use typeof
operator which returns a string. For example:
if (typeof variable === 'undefined') { // ... }
Both, typeof operand
and typeof(operand)
, are equivalent.
Comparison: undefined
vs. void(0)
vs. typeof
Checking undefined
With Strict Equals:
- Simple and self-explanatory.
- Isn't guaranteed, on old browsers, to always have the primitive
undefined
value, as it can be reassigned to any other value.
Checking undefined
With void(0)
:
- It is immutable;
- It returns the primitive
undefined
value even ifwindow.undefined
was reassigned; - Works on all browsers;
- Requires less characters (which can serve as a micro-optimization where size is a concern).
- Isn't self-explanatory and could be hard to understand at first glance.
Using typeof
:
- It is immutable;
- Works for variables that have not been declared;
- It returns the type as a string which can be used to safely check for undefined values
- It negates the need to explicitly check against the global
undefined
primitive; - It's easy to understand.
This post was published (and was last revised ) by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.