Disallow Initializing to undefined (no-undef-init)
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
.
Rule Details
This rule aims to eliminate variable declarations that initialize to undefined
.
The following patterns are considered problems:
/*eslint no-undef-init: 2*/
/*eslint-env es6*/
var foo = undefined; /*error It's not necessary to initialize 'foo' to undefined.*/
let bar = undefined; /*error It's not necessary to initialize 'bar' to undefined.*/
The following patterns are not considered problems:
/*eslint no-undef-init: 2*/
/*eslint-env es6*/
var foo;
let bar;
const baz = undefined;
When Not To Use It
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:
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.
Related Rules
Version
This rule was introduced in ESLint 0.0.6.