版本

no-undef-init

不允許將變數初始化為 undefined

🔧 可修正

此規則報告的某些問題可以透過 --fix 命令列 選項自動修正

❄️ 已凍結

此規則目前為已凍結狀態,不接受功能請求。

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

var foo;

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

因此,不需要將變數初始化為 undefined,例如

var foo = undefined;

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

規則詳情

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

此規則的錯誤程式碼範例

在 Playground 中開啟
/*eslint no-undef-init: "error"*/

var foo = undefined;
let bar = undefined;

此規則的正確程式碼範例

在 Playground 中開啟
/*eslint no-undef-init: "error"*/

var foo;
let bar;

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

此規則的其他正確程式碼範例

在 Playground 中開啟
/*eslint no-undef-init: "error"*/

const foo = undefined;

let { bar = undefined } = baz;

[quux = undefined] = quuux;

(foo = undefined) => {};

class Foo {
    bar = undefined;
}

何時不該使用

在迴圈內發生 var 宣告時,初始化為 undefined 的行為與省略初始化不同。例如

此規則的錯誤程式碼範例

在 Playground 中開啟
/*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

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

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

在 Playground 中開啟
/*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 中引入。

資源

變更語言