版本

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;
}

何时不使用

在一种情况下,初始化为 undefined 的行为与省略初始化的行为不同,那就是在循环内部发生 var 声明时。例如

此规则的错误代码示例

在 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 中引入。

资源

更改语言