3.7Objects / Prototype Builtins

Object.prototypeメソッドの直接呼び出し禁止

`hasOwnProperty`などの`Object.prototype`メソッドを直接呼び出すことは避けてください。オブジェクトのプロパティによって上書きされる可能性があります。

もし `const obj = { hasOwnProperty: () => false };` のようなオブジェクトがあった場合、`obj.hasOwnProperty('key')` は常に `false` を返してしまい、意図した動作になりません。また、`Object.create(null)` で作成されたプロトタイプを持たないオブジェクトに対しては、メソッドが存在しないためエラーになります。`Object.prototype.hasOwnProperty.call(obj, key)` や、より新しい `Object.hasOwn(obj, key)` を使うことで、これらの問題を回避し、安全にプロパティの存在を確認できます。

❌ Bad
// bad
console.log(object.hasOwnProperty(key));
✅ Good
// good
console.log(Object.prototype.hasOwnProperty.call(object, key));

// best
console.log(Object.hasOwn(object, key)); // only supported in browsers that support ES2022