no-undef
Disallow the use of undeclared variables unless mentioned in /*global */
comments
The "extends": "eslint:recommended"
property in a configuration file enables this rule
这条规则可以帮助你定位潜在的 ReferenceErrors,它是由变量和参数名称的拼写错误或意外的隐含 globals(例如,由于忘记了 for
循环初始化器中的 var
关键字)导致的。
规则细节
任何对未声明变量的引用都会导致警告,除非该变量在 /*global ...*/
注释中明确提及,或者在配置文件中的 globals
key in the configuration file。一个常见的使用情况是,如果你故意使用在其他地方定义的 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"){}
使用 { "typeof": true }
选项及 global
声明的正确示例:
/*global a*/
/*eslint no-undef: ["error", { "typeof": true }] */
if(typeof a === "string"){}
Environments
为了方便起见,ESLint 提供了快捷方式,预先定义了由流行的库和运行时环境暴露的全局变量。本规则支持这些环境,如指定环境中所列。下面给出了几个例子:
browser
在 browser
环境下,使用此规则的正确的示例:
/*eslint no-undef: "error"*/
/*eslint-env browser*/
setTimeout(function() {
alert("Hello");
});
Node.js
在 node
环境下,使用此规则的正确示例:
/*eslint no-undef: "error"*/
/*eslint-env node*/
var fs = require("fs");
module.exports = function() {
console.log(fs);
};
何时不用
如果全局变量的明确声明不符合你的喜好。
兼容
这条规则与 JSHint 和 JSLint 中对全局变量的处理兼容。
Handled by TypeScript
It is safe to disable this rule when using TypeScript because TypeScript's compiler enforces this check.
Related Rules
Version
This rule was introduced in ESLint v0.0.9.