Disallow Use of undefined Variable (no-undefined)

The undefined variable is unique in JavaScript because it is actually a property of the global object. As such, in ECMAScript 3 it was possible to overwrite the value of undefined. While ECMAScript 5 disallows overwriting undefined, it’s still possible to shadow undefined, such as:

functiondoSomething(data){varundefined="hi";// doesn't do what you think it doesif(data===undefined){// ...}}

This represents a problem for undefined that doesn’t exist for null, which is a keyword and primitive value that can neither be overwritten nor shadowed.

All uninitialized variables automatically get the value of undefined:

varfoo;console.log(foo===undefined);// true (assuming no shadowing)

For this reason, it’s not necessary to explicitly initialize a variable to undefined.

Taking all of this into account, some style guides forbid the use of undefined, recommending instead:

Variables that should be undefined are simply left uninitialized.

Checking if a value is undefined should be done with typeof.

Using the void operator to generate the value of undefined if necessary.

Examples

This rule aims to eliminate the use of undefined, and as such, generates a warning whenever it is used.

The following patterns are considered problems:

/*eslint no-undefined: 2*/varfoo=undefined;/*error Unexpected use of undefined.*/varundefined="foo";/*error Unexpected use of undefined.*/if(foo===undefined){/*error Unexpected use of undefined.*/// ...}functionfoo(undefined){/*error Unexpected use of undefined.*/// ...}