Spec-Zone.ru › ESLint

no-obj-calls

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

var math = Math();

var newMath = new Math();

var json = JSON();

var newJSON = new JSON();

var reflect = Reflect();

var newReflect = new Reflect();

var atomics = Atomics();

var newAtomics = new Atomics();

var intl = Intl();

var newIntl = new Intl();

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

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

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

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

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

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

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

Обработка TypeScript

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

Версия

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

Дополнительное чтение

Аннотированный ES5

Ссылки

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

© 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