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