
no-undefined
禁用将 undefined
用作标识符
❄️ 已冻结
此规则目前已冻结,不接受功能请求。
JavaScript 中的 undefined
变量实际上是全局对象的一个属性。因此,在 ECMAScript 3 中,可以覆盖 undefined
的值。虽然 ECMAScript 5 禁止覆盖 undefined
,但仍然可以遮蔽 undefined
,例如
function doSomething(data) {
const undefined = "hi";
// doesn't do what you think it does
if (data === undefined) {
// ...
}
}
由于 undefined
可以被覆盖或遮蔽,读取 undefined
可能会给出意外的值。(null
则不然,它是一个始终产生相同值的关键字。)为了防止这种情况,您可以避免所有 undefined
的使用,这正是一些风格指南推荐的,也是此规则强制执行的。这些风格指南还建议
- 应该为
undefined
的变量只需保持未初始化。(所有未初始化的变量在 JavaScript 中都会自动获得undefined
的值。) - 检查一个值是否为
undefined
应该使用typeof
。 - 如有必要,使用
void
运算符生成undefined
的值。
作为替代方案,您可以使用 no-global-assign 和 no-shadow-restricted-names 规则来防止 undefined
被遮蔽或分配不同的值。这确保了 undefined
将始终保持其原始的预期值。
规则详情
此规则旨在消除 undefined
的使用,因此,每当使用它时都会生成警告。
不正确代码示例,用于此规则
在 Playground 中打开
/*eslint no-undefined: "error"*/
const foo = ;
const = "foo";
if (foo === ) {
// ...
}
function baz() {
// ...
}
bar(, "lorem");
正确代码示例,用于此规则
在 Playground 中打开
/*eslint no-undefined: "error"*/
const foo = void 0;
const Undefined = "foo";
if (typeof foo === "undefined") {
// ...
}
global.undefined = "foo";
bar(void 0, "lorem");
何时不使用它
如果您想在代码中允许使用 undefined
,那么您可以安全地关闭此规则。
相关规则
版本
此规则在 ESLint v0.7.1 中引入。
延伸阅读
