版本

no-undefined

禁用将 undefined 用作标识符

❄️ 已冻结

此规则目前已冻结,不接受功能请求。

JavaScript 中的 undefined 变量实际上是全局对象的一个属性。因此,在 ECMAScript 3 中,可以覆盖 undefined 的值。虽然 ECMAScript 5 禁止覆盖 undefined,但仍然可以遮蔽 undefined,例如

function doSomething(data) {
    const undefined = "hi";

    // doesn't do what you think it does
    if (data === undefined) {
        // ...
    }

}

由于 undefined 可以被覆盖或遮蔽,读取 undefined 可能会给出意外的值。(null 则不然,它是一个始终产生相同值的关键字。)为了防止这种情况,您可以避免所有 undefined 的使用,这正是一些风格指南推荐的,也是此规则强制执行的。这些风格指南还建议

  • 应该为 undefined 的变量只需保持未初始化。(所有未初始化的变量在 JavaScript 中都会自动获得 undefined 的值。)
  • 检查一个值是否为 undefined 应该使用 typeof
  • 如有必要,使用 void 运算符生成 undefined 的值。

作为替代方案,您可以使用 no-global-assignno-shadow-restricted-names 规则来防止 undefined 被遮蔽或分配不同的值。这确保了 undefined 将始终保持其原始的预期值。

规则详情

此规则旨在消除 undefined 的使用,因此,每当使用它时都会生成警告。

不正确代码示例,用于此规则

在 Playground 中打开
/*eslint no-undefined: "error"*/

const foo = undefined;

const undefined = "foo";

if (foo === undefined) {
    // ...
}

function baz(undefined) {
    // ...
}

bar(undefined, "lorem");

正确代码示例,用于此规则

在 Playground 中打开
/*eslint no-undefined: "error"*/

const foo = void 0;

const Undefined = "foo";

if (typeof foo === "undefined") {
    // ...
}

global.undefined = "foo";

bar(void 0, "lorem");

何时不使用它

如果您想在代码中允许使用 undefined,那么您可以安全地关闭此规则。

版本

此规则在 ESLint v0.7.1 中引入。

延伸阅读

资源

更改语言