no-undefined
禁止使用 undefined
作为标识符
JavaScript 中的 undefined
变量实际上是全局对象的一个属性。因此,在 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
的变量只是未初始化。(所有未初始化的变量在 JavaScript 中自动获取undefined
的值。) - 检查值是否为
undefined
应使用typeof
完成。 - 如有必要,使用
void
运算符生成undefined
的值。
作为替代方案,您可以使用 no-global-assign 和 no-shadow-restricted-names 规则来防止 undefined
被遮蔽或分配不同的值。这确保了 undefined
将始终保持其原始预期值。
规则详情
Vmw4exO96Bwy/fJ4IRvEDL+w0tlOQhqG/p8MFARdGgFJllaW8McTskWYAtd5I1ob1nRAqUaXqWaO0UOMFMvYdD1U4032tRLf9C5WnjwoPmuVcFfnjTElhR+gz3pdwoMelEJNghgwh4UmQABkgFxEGg==
k7HkpyhTRoT9T3bsrVJ1W9IUT56r3GvYicL0qS8XjwbDvDXG9eGk/CkswpMjh9k+
/*eslint no-undefined: "error"*/
var foo = undefined;
var undefined = "foo";
if (foo === undefined) {
// ...
}
function foo(undefined) {
// ...
}
bar(undefined, "lorem");
f/g6SKVZdhoBiPVtnee0m+uPEv1T4kMgIaFUpxdtFwzAZHGBqJ5dJxRHxHHP/cP8
/*eslint no-undefined: "error"*/
var foo = void 0;
var Undefined = "foo";
if (typeof foo === "undefined") {
// ...
}
global.undefined = "foo";
bar(void 0, "lorem");
何时不使用
Hppp7cqzmgXYWwzSxwuMUA0ORaJtkOAvYZlHCOuzFkgdvNQp3ObwrHujr0CdlezO7HLHCePkTpfxqwCxxOsAPNdOMS4ICJaufgmpgq3PJO7G36/wRSa+zCYpVxsNC7LlGd4zNAo11iXmguxv8MB+kQ==