no-obj-calls
Disallow calling global object properties as functions
Using the recommended config from @eslint/js in a configuration file
enables this rule
ECMAScript provides several global objects that are intended to be used as-is. Some of these objects look as if they could be constructors due to their capitalization (such as Math, JSON, and Temporal) but will throw an error if you try to execute them as functions.
The ECMAScript 5 specification makes it clear that both Math and JSON cannot be invoked:
The Math object does not have a
[[Call]]internal property; it is not possible to invoke the Math object as a function.
The ECMAScript 2015 specification makes it clear that Reflect cannot be invoked:
The Reflect object also does not have a
[[Call]]internal method; it is not possible to invoke the Reflect object as a function.
The ECMAScript 2017 specification makes it clear that Atomics cannot be invoked:
The Atomics object does not have a
[[Call]]internal method; it is not possible to invoke the Atomics object as a function.
The ECMAScript Internationalization API Specification makes it clear that Intl cannot be invoked:
The Intl object does not have a
[[Call]]internal method; it is not possible to invoke the Intl object as a function.
The Temporal proposal specification makes it clear that Temporal cannot be invoked:
The Temporal object does not have a
[[Call]]internal method; it cannot be invoked as a function.
Rule Details
This rule disallows calling the Math, JSON, Reflect, Atomics, Intl, and Temporal objects as functions.
This rule also disallows using these objects as constructors with the new operator.
Examples of incorrect code for this rule:
/*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 = ;
Examples of correct code for this rule:
/*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();
Options
This rule has no options.
Handled by TypeScript
It is safe to disable this rule when using TypeScript because TypeScript's compiler enforces this check.
Version
This rule was introduced in ESLint v0.0.9.