Object.hasOwn replaces a call you were writing wrong

obj.hasOwnProperty(k) fails on an object created with a null prototype and can be shadowed by a property called hasOwnProperty.

const o = Object.create(null)
o.k = 1

o.hasOwnProperty('k')            // TypeError: not a function
Object.prototype.hasOwnProperty.call(o, 'k')   // true, verbose
Object.hasOwn(o, 'k')            // true

// and the shadowing case, which is why linters flagged it:
const parsed = JSON.parse('{"hasOwnProperty": 1}')
parsed.hasOwnProperty('x')       // TypeError

The shadowing case arrives from parsed JSON, which is exactly where a key check is most needed — so the lint rule against calling it directly has been correct for years and the verbose workaround was what everybody actually wrote. This is one of the small additions that removes a rule from a style guide.