版本

no-new-native-nonconstructor

不允許對全域非建構函式使用 new 運算符

建議

設定檔中使用來自 `@eslint/js` 的 recommended 設定會啟用此規則

在 JavaScript 中,以大寫字母開頭的全域變數通常代表可以使用 new 運算符實例化的類別,例如 new Arraynew Map。 令人困惑的是,JavaScript 也提供了一些以大寫字母開頭的全域變數,這些變數不能使用 new 運算符調用,如果您嘗試這樣做,將會拋出錯誤。 這些通常是與資料類型相關的函數,很容易被誤認為是類別。 請考慮以下範例

// throws a TypeError
const foo = new Symbol("foo");

// throws a TypeError
const result = new BigInt(9007199254740991);

new Symbolnew BigInt 都會拋出類型錯誤,因為它們是函數而不是類別。 很容易犯這個錯誤,因為會假設大寫字母表示類別。

規則詳情

此規則旨在防止意外地使用 new 運算符調用原生 JavaScript 全域函數。 這些函數是

  • Symbol
  • BigInt

範例

此規則的 錯誤 程式碼範例

在遊樂場開啟
/*eslint no-new-native-nonconstructor: "error"*/

const foo = new Symbol('foo');
const bar = new BigInt(9007199254740991);

此規則的 正確 程式碼範例

在遊樂場開啟
/*eslint no-new-native-nonconstructor: "error"*/

const foo = Symbol('foo');
const bar = BigInt(9007199254740991);

// Ignores shadowed Symbol.
function baz(Symbol) {
    const qux = new Symbol("baz");
}
function quux(BigInt) {
    const corge = new BigInt(9007199254740991);
}

何時不該使用

此規則不應在 ES3/5 環境中使用。

由 TypeScript 處理

當使用 TypeScript 時,停用此規則是安全的,因為 TypeScript 的編譯器會強制執行此檢查。

版本

此規則在 ESLint v8.27.0 中引入。

延伸閱讀

資源

變更語言