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 中引入。