What exactly is the difference between undefined
and void 0
?
Which is preferred and why?
What exactly is the difference between undefined
and void 0
?
Which is preferred and why?
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
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.
Use undefined
. Its more commonly known than void(0)
.
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