Skip to content
← Back to rules

eslint/no-shadow-restricted-names 正确性

This rule is turned on by default.

它做了什么

禁止重新定义全局变量,例如 undefinedNaNInfinityevalglobalThisarguments

为什么这是不好的?

全局对象的值属性 NaNInfinityundefinedglobalThis 以及严格模式中受限的标识符 evalarguments 在 JavaScript 中被视为受限制的名称。将它们重新定义为其他含义可能会导致意外后果,并使阅读代码的人感到困惑。例如,没有任何机制阻止你编写:

javascript
var undefined = "foo";

然后在同一作用域内的任何代码都将获取到局部版本的 undefined,其含义与原始的全局 undefined 完全不同。

示例

此规则的 错误 代码示例:

javascript
function NaN() {}

!function (Infinity) {};

var undefined = 5;

try {
} catch (eval) {}

const globalThis = "foo";
javascript
import NaN from "foo";

import { undefined } from "bar";

class Infinity {}

此规则的 正确 代码示例:

javascript
var Object;

function f(a, b) {}

// 例外情况:如果变量从未被赋值,则允许 `undefined` 被遮蔽。
var undefined;
javascript
import { undefined as undef } from "bar";

配置

此规则接受一个包含以下属性的配置对象:

reportGlobalThis

type: boolean

default: true

如果为 true,则也报告对 globalThis 的遮蔽。

如何使用

要通过配置文件或 CLI 启用 此规则,可以使用:

json
{
  "rules": {
    "no-shadow-restricted-names": "error"
  }
}
bash
oxlint --deny no-shadow-restricted-names

参考资料