JavaScript/Object/hasOwn
< JavaScript | Object
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
この新しいメソッドにより、オブジェクトのプロパティチェックがより安全で簡潔に行えるようになりました。