Spec-Zone.ru › ESLint

no-new-native-nonconstructor

Запрещает использование операторов new с глобальными функциями, не являющимися конструкторами

✅ Рекомендуется

Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило

В JavaScript принято считать, что глобальные переменные, начинающиеся с заглавной буквы, обычно представляют классы, экземпляры которых можно создавать с помощью оператора new, например new Array и new Map. Однако в JavaScript также есть глобальные переменные, начинающиеся с заглавной буквы, которые нельзя вызывать с помощью оператора new: такая попытка приведёт к ошибке. Обычно это функции, связанные с типами данных, которые легко принять за классы. Рассмотрим следующий пример:

// throws a TypeError
const foo = new Symbol("foo");

// throws a TypeError
const result = new BigInt(9007199254740991);

И new Symbol, и new BigInt вызывают ошибку типа, так как это функции, а не классы. Легко допустить такую ошибку, предположив, что заглавные буквы указывают на классы.

Подробное описание правила

Это правило предназначено для предотвращения случайного вызова встроенных глобальных функций JavaScript с помощью оператора new. К таким функциям относятся:

  • 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 выполняет эту проверку.

Связанные правила

  • no-obj-calls

Версия

Это правило появилось в ESLint v8.27.0.

Дополнительная литература

Спецификация языка ECMAScript® 2023
tc39.es
Спецификация языка ECMAScript® 2023
tc39.es

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-new-native-nonconstructor

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API