no-undef
禁止使用未声明的变量,除非在 /*global */
注释中提到。
✅ 推荐
在 配置文件 中使用来自 @eslint/js
的 recommended
配置将启用此规则。
此规则可以帮助您找到可能由变量和参数名称拼写错误或意外的隐式全局变量(例如,在 for
循环初始化程序中忘记 var
关键字)导致的潜在 ReferenceError。
规则详情
对未声明变量的任何引用都会导致警告,除非该变量在 /*global ...*/
注释中明确提及,或在 配置文件中的 globals
键 中指定。这些的一个常见用例是,如果您有意使用在其他地方定义的全局变量(例如,在从 HTML 中获取的脚本中)。
此规则的错误代码示例
在代码游乐场中打开
/*eslint no-undef: "error"*/
var foo = ();
var bar = + 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 === "string"){}
使用 global
声明的 { "typeof": true }
选项的正确代码示例
在代码游乐场中打开
/*global a*/
/*eslint no-undef: ["error", { "typeof": true }] */
if(typeof a === "string"){}
何时不使用它
如果您不喜欢显式声明全局变量。
兼容性
此规则提供了与 JSHint 和 JSLint 中全局变量处理的兼容性。
由 TypeScript 处理
在使用 TypeScript 时禁用此规则是安全的,因为 TypeScript 的编译器会强制执行此检查。
相关规则
版本
此规则在 ESLint v0.0.9 中引入。