mirror of
https://git.proxmox.com/git/pve-eslint
synced 2025-10-05 11:41:00 +00:00

includes a (minimal) working wrapper Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
112 lines
2.2 KiB
Markdown
112 lines
2.2 KiB
Markdown
# 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:
|
|
|
|
```js
|
|
var foo;
|
|
|
|
console.log(foo === undefined); // true
|
|
```
|
|
|
|
It's therefore unnecessary to initialize a variable to `undefined`, such as:
|
|
|
|
```js
|
|
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`.
|
|
|
|
Examples of **incorrect** code for this rule:
|
|
|
|
```js
|
|
/*eslint no-undef-init: "error"*/
|
|
/*eslint-env es6*/
|
|
|
|
var foo = undefined;
|
|
let bar = undefined;
|
|
```
|
|
|
|
Examples of **correct** code for this rule:
|
|
|
|
```js
|
|
/*eslint no-undef-init: "error"*/
|
|
/*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:
|
|
|
|
Example of **incorrect** code for this rule:
|
|
|
|
```js
|
|
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:
|
|
|
|
```js
|
|
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:
|
|
|
|
```js
|
|
for (i = 0; i < 10; i++) {
|
|
var x;
|
|
console.log(x);
|
|
x = i;
|
|
}
|
|
```
|
|
|
|
This code is equivalent to:
|
|
|
|
```js
|
|
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:
|
|
|
|
```js
|
|
/*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;
|
|
}
|
|
```
|
|
|
|
## Related Rules
|
|
|
|
* [no-undefined](no-undefined.md)
|
|
* [no-void](no-void.md)
|