Spec-Zone.ru › ESLint

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. Эти функции включают:

  • Symbol
  • BigInt

Примеры

Примеры неправильного кода для этого правила:

Открыть в Playground
/*eslint no-new-native-nonconstructor: "error"*/

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

Примеры правильного кода для этого правила:

Открыть в Playground
/*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.

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

  • no-obj-calls

Версия

Это правило было добавлено в ESLint v8.27.0.

Дополнительные материалы

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

Ссылки

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

© 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