no-undef-init
禁止将变量初始化为 undefined
🔧 可修复
此规则报告的一些问题可以通过 --fix
命令行 选项自动修复
在 JavaScript 中,声明但未初始化任何值的变量会自动获得 undefined
的值。例如
var foo;
console.log(foo === undefined); // true
因此,将变量初始化为 undefined
是不必要的,例如
var foo = undefined;
将变量初始化为 undefined
被认为是一种最佳实践。
规则详细信息
此规则旨在消除初始化为 undefined
的 var
和 let
变量声明。
此规则的不正确代码示例
在游乐场中打开
/*eslint no-undef-init: "error"*/
var ;
let ;
此规则的正确代码示例
在游乐场中打开
/*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 ;
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 中引入。