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.
Примеры неправильного кода для этого правила:
/*eslint no-obj-calls: "error"*/
const math = ;
const newMath = ;
const json = ;
const newJSON = ;
const reflect = ;
const newReflect = ;
const atomics = ;
const newAtomics = ;
const intl = ;
const newIntl = ;
const temporal = ;
const newTemporal = ;
Примеры правильного кода для этого правила:
/*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.
Дополнительные материалы
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-obj-calls