What exactly is the difference between undefined
and void 0
?
Which is preferred and why?
undefined
has normal variable semantics that not even strict mode can fix and requires run-time look-up. It can be shadowed
like any other variable, and the default global variable undefined
is not read-only in ES3.
void 0
is effectively a compile time bulletproof constant for undefined
with no look-up requirements. It is
like writing null
or true
, instead of looking up a variable value. It works out of the box without any safety arguments and is shorter to write. It is better in every way.
The difference is that some browsers allow you to overwrite the value of undefined
. However, void anything
always returns real undefined
.
undefined = 1;
console.log(!!undefined); //true
console.log(!!void 0); //false
Parentheses here are optional, void 0
, void(0)
and void (0)
are equivalent. The void
is a unary operator with a right-to-left associativity, hence the value is placed at the right of it:
void <VALUE>
.
For second question, you need to use undefined
directly while avoiding unneeded operand evaluation to retrieve the same undefined
value.
More info in the reference: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/void
Use undefined
. Its more commonly known than void(0)
.