版本

no-new-native-nonconstructor

禁止對全域非建構函式使用 new 運算子

建議

設定檔中使用 @eslint/jsrecommended 設定會啟用此規則

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

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

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

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

規則詳情

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

  • Symbol
  • BigInt

範例

此規則的錯誤程式碼範例

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

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

此規則的正確程式碼範例

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

var foo = Symbol('foo');
var 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 中引入。

延伸閱讀

資源

變更語言