版本

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

示例

此规则的错误代码示例

在 Playground 中打开
/*eslint no-new-native-nonconstructor: "error"*/

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

此规则的正确代码示例

在 Playground 中打开
/*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 中引入。

延伸阅读

资源

更改语言