no-undefined
Disallow Use of undefined Variable (no-undefined)
undefined
JavaScript 中的变量实际上是全局对象的属性。因此,在 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
,它是一个总是产生相同值的关键字。)为了防止出现这种情况,您可以避免使用undefined
某些风格指南推荐的内容和此规则强制执行的内容。那些风格指南也建议:
- 应该将变量
undefined
保留为未初始化状态。(所有未初始化的变量都会自动获取undefined
JavaScript 中的值。)
- 检查一个值是否
undefined
应该完成typeof
。
- 如果需要,使用
void
操作员生成值undefined
。
或者,您可以使用 no-global-assign 和 no-shadow-restricted-names 规则来防止undefined
被映射或分配不同的值。这可确保undefined
始终保持其原始预期价值。
规则细节
该规则旨在消除使用undefined
,并因此在使用时发出警告。
此规则的错误
代码示例:
/*eslint no-undefined: "error"*/
var foo = undefined;
var undefined = "foo";
if (foo === undefined) {
// ...
}
function foo(undefined) {
// ...
}
此规则的正确
代码示例:
/*eslint no-undefined: "error"*/
var foo = void 0;
var Undefined = "foo";
if (typeof foo === "undefined") {
// ...
}
global.undefined = "foo";
何时不使用它
如果你想允许undefined
在你的代码中使用,那么你可以放心地关闭这个规则。
Further Reading
相关规则
- no-undef-init
- no-void
- no-shadow-restricted-names
- no-global-assign
版本
这条规则是在 ESLint 0.7.1中引入的。