版本

no-undefined

禁止使用undefined作为标识符

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

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

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

}

因为undefined可以被覆盖或隐藏,所以读取undefined可能会得到意外的值。(这对于null来说并非如此,null是一个始终产生相同值的关键字。)为了防止这种情况,您可以避免所有undefined的使用,这正是某些风格指南建议的,也是此规则强制执行的。这些风格指南还建议

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

或者,您可以使用no-global-assignno-shadow-restricted-names规则来防止undefined被隐藏或分配不同的值。这确保了undefined将始终保持其原始的预期值。

规则详情

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

此规则的错误代码示例

在游乐场中打开
/*eslint no-undefined: "error"*/

var foo = undefined;

var undefined = "foo";

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

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

bar(undefined, "lorem");

此规则的正确代码示例

在游乐场中打开
/*eslint no-undefined: "error"*/

var foo = void 0;

var Undefined = "foo";

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

global.undefined = "foo";

bar(void 0, "lorem");

何时不使用它

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

版本

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

进一步阅读

资源

更改语言