版本

no-undef-init

不允許將變數初始化為 undefined

🔧 可修正

此規則回報的一些問題可以使用 --fix 命令列選項自動修正

在 JavaScript 中,宣告但未初始化任何值的變數會自動取得 undefined 的值。 例如:

var foo;

console.log(foo === undefined);     // true

因此,將變數初始化為 undefined 是不必要的,例如:

var foo = undefined;

最佳實務是避免將變數初始化為 undefined

規則詳情

此規則旨在消除初始化為 undefinedvarlet 變數宣告。

此規則的錯誤程式碼範例

在遊樂場開啟
/*eslint no-undef-init: "error"*/

var foo = undefined;
let bar = undefined;

此規則的正確程式碼範例

在遊樂場開啟
/*eslint no-undef-init: "error"*/

var foo;
let bar;

請注意,此規則不會檢查 const 宣告、解構模式、函式參數和類別欄位。

此規則的額外正確程式碼範例

在遊樂場開啟
/*eslint no-undef-init: "error"*/

const foo = undefined;

let { bar = undefined } = baz;

[quux = undefined] = quuux;

(foo = undefined) => {};

class Foo {
    bar = undefined;
}

何時不該使用

有一種情況將變數初始化為 undefined 的行為與省略初始化不同,那就是在迴圈內發生 var 宣告時。例如:

此規則的錯誤程式碼範例

在遊樂場開啟
/*eslint no-undef-init: "error"*/

for (i = 0; i < 10; i++) {
    var x = undefined;
    console.log(x);
    x = i;
}

在這種情況下,var x 會被提升到迴圈之外,實際上會建立:

var x;

for (i = 0; i < 10; i++) {
    x = undefined;
    console.log(x);
    x = i;
}

如果您要移除初始化,則迴圈的行為會改變:

for (i = 0; i < 10; i++) {
    var x;
    console.log(x);
    x = i;
}

此程式碼等同於:

var x;

for (i = 0; i < 10; i++) {
    console.log(x);
    x = i;
}

這會產生與在迴圈中定義 var x = undefined 不同的結果,因為 x 不再在每次通過迴圈時都重設為 undefined

如果您在迴圈內使用這樣的初始化,則應停用此規則。

此規則的正確程式碼範例,因為它在特定行被停用

在遊樂場開啟
/*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;
}

版本

此規則在 ESLint v0.0.6 中引入。

資源

變更語言