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