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

参照