首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

no-undefined

undefinedJavaScript 中的变量实际上是全局对象的属性。因此,在 ECMAScript 3 中可以覆盖值undefined。虽然 ECMAScript 5 不允许覆盖undefined,但仍有可能产生影响undefined,例如:

代码语言:javascript
复制
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,并因此在使用时发出警告。

此规则的错误代码示例:

代码语言:javascript
复制
/*eslint no-undefined: "error"*/

var foo = undefined;

var undefined = "foo";

if (foo === undefined) {
    // ...
}

function foo(undefined) {
    // ...
}

此规则的正确代码示例:

代码语言:javascript
复制
/*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中引入的。

资源

扫码关注腾讯云开发者

领取腾讯云代金券