eslint/no-shadow-restricted-names 正确性
它做了什么
禁止重新定义全局变量,例如 undefined、NaN、Infinity、eval、globalThis 和 arguments。
为什么这是不好的?
全局对象的值属性 NaN、Infinity、undefined、globalThis 以及严格模式中受限的标识符 eval 和 arguments 在 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