版本

no-undef

禁止使用未声明的变量,除非在 /*global */ 注释中提到。

推荐

配置文件 中使用来自 @eslint/jsrecommended 配置将启用此规则。

此规则可以帮助您找到可能由变量和参数名称拼写错误或意外的隐式全局变量(例如,在 for 循环初始化程序中忘记 var 关键字)导致的潜在 ReferenceError。

规则详情

对未声明变量的任何引用都会导致警告,除非该变量在 /*global ...*/ 注释中明确提及,或在 配置文件中的 globals 中指定。这些的一个常见用例是,如果您有意使用在其他地方定义的全局变量(例如,在从 HTML 中获取的脚本中)。

此规则的错误代码示例

在代码游乐场中打开
/*eslint no-undef: "error"*/

var foo = someFunction();
var bar = a + 1;

使用 global 声明的此规则的正确代码示例

在代码游乐场中打开
/*global someFunction, a*/
/*eslint no-undef: "error"*/

var foo = someFunction();
var bar = a + 1;

请注意,此规则不允许对只读全局变量进行赋值。如果您还想禁止这些赋值,请参阅 no-global-assign

此规则也不禁止全局变量的重新声明。如果您还想禁止这些重新声明,请参阅 no-redeclare

选项

  • typeof 设置为 true 将对在 typeof 检查中使用的变量发出警告(默认为 false)。

typeof

默认 { "typeof": false } 选项的正确代码示例

在代码游乐场中打开
/*eslint no-undef: "error"*/

if (typeof UndefinedIdentifier === "undefined") {
    // do something ...
}

如果您想防止对未声明的变量进行 typeof 检查,可以使用此选项。

{ "typeof": true } 选项的错误代码示例

在代码游乐场中打开
/*eslint no-undef: ["error", { "typeof": true }] */

if(typeof a === "string"){}

使用 global 声明的 { "typeof": true } 选项的正确代码示例

在代码游乐场中打开
/*global a*/
/*eslint no-undef: ["error", { "typeof": true }] */

if(typeof a === "string"){}

何时不使用它

如果您不喜欢显式声明全局变量。

兼容性

此规则提供了与 JSHintJSLint 中全局变量处理的兼容性。

由 TypeScript 处理

在使用 TypeScript 时禁用此规则是安全的,因为 TypeScript 的编译器会强制执行此检查。

版本

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

资源

更改语言