Eslint
规则 | Rules

no-undefined

Disallow Use of undefined Variable (no-undefined)

undefinedJavaScript 中的变量实际上是全局对象的属性。因此,在 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保留为未初始化状态。(所有未初始化的变量都会自动获取undefinedJavaScript 中的值。)

  • 检查一个值是否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中引入的。

资源