Versions

no-new-native-nonconstructor

Disallow new operators with global non-constructor functions

在 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

示例

使用此规则的错误示例:

Open in Playground
/*eslint no-new-native-nonconstructor: "error"*/
/*eslint-env es2022*/

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

使用此规则的正确示例:

Open in Playground
/*eslint no-new-native-nonconstructor: "error"*/
/*eslint-env es2022*/

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 环境中使用。

Version

This rule was introduced in ESLint v8.27.0.

Further Reading

Resources

更改语言