no-new-native-nonconstructor
不允許對全域非建構函式使用 new
運算符
✅ 建議
在設定檔中使用來自 `@eslint/js` 的 recommended
設定會啟用此規則
在 JavaScript 中,以大寫字母開頭的全域變數通常代表可以使用 new
運算符實例化的類別,例如 new Array
和 new Map
。 令人困惑的是,JavaScript 也提供了一些以大寫字母開頭的全域變數,這些變數不能使用 new
運算符調用,如果您嘗試這樣做,將會拋出錯誤。 這些通常是與資料類型相關的函數,很容易被誤認為是類別。 請考慮以下範例
// throws a TypeError
const foo = new Symbol("foo");
// throws a TypeError
const result = new BigInt(9007199254740991);
new Symbol
和 new BigInt
都會拋出類型錯誤,因為它們是函數而不是類別。 很容易犯這個錯誤,因為會假設大寫字母表示類別。
規則詳情
此規則旨在防止意外地使用 new
運算符調用原生 JavaScript 全域函數。 這些函數是
Symbol
BigInt
範例
此規則的 錯誤 程式碼範例
在遊樂場開啟
/*eslint no-new-native-nonconstructor: "error"*/
const foo = new ('foo');
const bar = new (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 中引入。