Object.hasOwn() は、JavaScriptの Object に追加された新しいメソッドで、オブジェクトが特定のプロパティを直接所有しているかどうかを安全に確認できます。ECMAScript 2022で導入されました。

背景と目的
従来の hasOwnProperty メソッドには以下のような問題がありました:
  • Object.create(null) で作成したオブジェクトでは使用できない
  • オブジェクトで hasOwnProperty が再定義される可能性がある
  • ESLintの no-prototype-builtins ルールで使用が禁止されることがある
使用例
Object.hasOwn() の基本的な使い方
const object = { foo: false };
Object.hasOwn(object, "foo"); // true

const object2 = Object.create({ foo: true });
Object.hasOwn(object2, "foo"); // false

const object3 = Object.create(null);
Object.hasOwn(object3, "foo"); // false
従来のコードとの比較
// 従来の方法
let hasOwnProperty = Object.prototype.hasOwnProperty;
if (hasOwnProperty.call(object, "foo")) {
  console.log("has property foo");
}

// Object.hasOwn() を使用
if (Object.hasOwn(object, "foo")) {
  console.log("has property foo");
}
メリット
  • より簡潔で理解しやすいコードが書ける
  • Object.create(null) で作成したオブジェクトでも安全に使える
  • プロパティの再定義の影響を受けない
  • ESLintの no-prototype-builtins ルールに準拠
サポート状況
  • V8 (Chrome)
  • SpiderMonkey (Firefox)
  • JavaScriptCore (Safari)
  • その他の実装
    • SerenityOS: LibJS
    • engine262
関連ライブラリ
  • npm: has
  • npm: lodash.has
  • npm: just-has
  • ramda: R.has

この新しいメソッドにより、オブジェクトのプロパティチェックがより安全で簡潔に行えるようになりました。