no-new-native-nonconstructor
Запретить использование оператора new с глобальными функциями, не являющимися конструкторами
Использование конфигурации recommended из @eslint/js в файле конфигурации активирует эту проверку
В 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 генерируют ошибку типа, потому что они являются функциями, а не классами. Легко ошибиться, приняв заглавные буквы за указание на классы.
Подробное описание правила
Это правило призвано предотвратить случайное вызов глобальных функций JavaScript с оператором new. Эти функции включают:
SymbolBigInt
Примеры
Примеры неправильного кода для этого правила:
/*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.
Связанные правила
Версия
Это правило было добавлено в ESLint v8.27.0.
Дополнительные материалы
Ссылки
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-new-native-nonconstructor