no-undef-init
不允許將變數初始化為 undefined
在 JavaScript 中,宣告但未初始化任何值的變數會自動取得 undefined
值。例如
var foo;
console.log(foo === undefined); // true
因此,不需要將變數初始化為 undefined
,例如
var foo = undefined;
避免將變數初始化為 undefined
被認為是最佳實務。
規則詳情
此規則旨在消除初始化為 undefined
的 var
和 let
變數宣告。
此規則的錯誤程式碼範例
在 Playground 中開啟
/*eslint no-undef-init: "error"*/
var ;
let ;
此規則的正確程式碼範例
在 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 ;
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 中引入。