JavaScript `undefined` vs `void 0`
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