Spec-Zone.ru › ESLint

no-obj-calls

Запрет вызова свойств глобальных объектов в качестве функций

✅ Рекомендуемое

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

ECMAScript предоставляет несколько глобальных объектов, которые предназначены для использования без изменений. Некоторые из этих объектов из-за заглавной буквы в названии выглядят так, будто являются конструкторами (например, Math, JSON и Temporal), но при попытке вызвать их как функции возникает ошибка.

В спецификации ECMAScript 5 ясно указано, что Math и JSON нельзя вызывать:

У объекта Math нет внутреннего свойства [[Call]]; вызвать объект Math как функцию невозможно.

В спецификации ECMAScript 2015 ясно указано, что Reflect нельзя вызывать:

У объекта Reflect также нет внутреннего метода [[Call]]; вызвать объект Reflect как функцию невозможно.

В спецификации ECMAScript 2017 ясно указано, что Atomics нельзя вызывать:

У объекта Atomics нет внутреннего метода [[Call]]; вызвать объект Atomics как функцию невозможно.

В спецификации API интернационализации ECMAScript ясно указано, что Intl нельзя вызывать:

У объекта Intl нет внутреннего метода [[Call]]; вызвать объект Intl как функцию невозможно.

В спецификации предложения Temporal ясно указано, что Temporal нельзя вызывать:

У объекта Temporal нет внутреннего метода [[Call]]; его нельзя вызвать как функцию.

Описание правила

Это правило запрещает вызывать объекты Math, JSON, Reflect, Atomics, Intl и Temporal как функции.

Это правило также запрещает использовать эти объекты в качестве конструкторов с оператором new.

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

Открыть в Playground
/*eslint no-obj-calls: "error"*/

const math = Math();

const newMath = new Math();

const json = JSON();

const newJSON = new JSON();

const reflect = Reflect();

const newReflect = new Reflect();

const atomics = Atomics();

const newAtomics = new Atomics();

const intl = Intl();

const newIntl = new Intl();

const temporal = Temporal();

const newTemporal = new Temporal();

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

Открыть в Playground
/*eslint no-obj-calls: "error"*/

function area(r) {
    return Math.PI * r * r;
}

const object = JSON.parse("{}");

const value = Reflect.get({ x: 1, y: 2 }, "x");

const first = Atomics.load(foo, 0);

const segmenterFr = new Intl.Segmenter("fr", { granularity: "word" });

const instant = Temporal.Now.instant();

Параметры

У этого правила нет параметров.

Обрабатывается TypeScript

Это правило можно безопасно отключить при использовании TypeScript, поскольку компилятор TypeScript выполняет эту проверку.

Версия

Это правило появилось в ESLint v0.0.9.

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

ES5 с комментариями
es5.github.io

Ресурсы

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

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

Spec-Zone.ru

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