no-new-native-nonconstructor

禁止具有全局非构造函数的 new 运算符

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

示例

OpUIv0oisK0bLUHx1HrbeprjTmaHIkOBU8JijIRILjf97h20WuzOboUCkSVDjgDx

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

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

cpCXNsC2RixCLVqfAZWyxxZwdKAQQJ9XuumnZbwI+QzJDz9EkFlmFnrpIlN7+8w0

/*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);
}

何时不使用

M0UF4xdF0cKiBGZhVgCkYB+Cnalus/U5fp9QsmQDwtkcSAaXxyDqBoWxgCiRiiLi