The --fix
option on the command line can automatically fix some of the problems reported by this rule.
In JavaScript, a variable that is declared and not initialized to any value automatically gets the value of undefined
. For example:
var foo; console.log(foo === undefined); // true
It’s therefore unnecessary to initialize a variable to undefined
, such as:
var foo = undefined;
It’s considered a best practice to avoid initializing variables to undefined
.
This rule aims to eliminate variable declarations that initialize to undefined
.
Examples of incorrect code for this rule:
/*eslint no-undef-init: "error"*/ /*eslint-env es6*/ var foo = undefined; let bar = undefined;
Examples of correct code for this rule:
/*eslint no-undef-init: "error"*/ /*eslint-env es6*/ var foo; let bar; const baz = undefined;
There is one situation where initializing to undefined
behaves differently than omitting the initialization, and that’s when a var
declaration occurs inside of a loop. For example:
Example of incorrect code for this rule:
for (i = 0; i < 10; i++) { var x = undefined; console.log(x); x = i; }
In this case, the var x
is hoisted out of the loop, effectively creating:
var x; for (i = 0; i < 10; i++) { x = undefined; console.log(x); x = i; }
If you were to remove the initialization, then the behavior of the loop changes:
for (i = 0; i < 10; i++) { var x; console.log(x); x = i; }
This code is equivalent to:
var x; for (i = 0; i < 10; i++) { console.log(x); x = i; }
This produces a different outcome than defining var x = undefined
in the loop, as x
is no longer reset to undefined
each time through the loop.
If you’re using such an initialization inside of a loop, then you should disable this rule.
Example of correct code for this rule, because it is disabled on a specific line:
/*eslint no-undef-init: "error"*/ for (i = 0; i < 10; i++) { var x = undefined; // eslint-disable-line no-undef-init console.log(x); x = i; }
This rule was introduced in ESLint 0.0.6.
© JS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/rules/no-undef-init