JavaScript/Object/prototype/hasOwnProperty
Object.prototype.hasOwnProperty()
は、指定されたプロパティがオブジェクト自身のプロパティとして存在するかどうかを判定するメソッドです。このメソッドは、プロトタイプチェーンを通じて継承されたプロパティではなく、オブジェクト自身が直接所有するプロパティを確認するために使用されます[1]。
構文
編集obj.hasOwnProperty(prop)
obj
: プロパティの存在を確認する対象のオブジェクト。prop
: 確認するプロパティの名前(文字列またはシンボル)。
例
編集オブジェクト自身のプロパティを確認するプログラム
編集以下のプログラムは、Object.prototype.hasOwnProperty()
を使用してオブジェクト自身のプロパティを確認します。
const obj = { a: 1, b: 2 }; console.log(obj.hasOwnProperty('a')); // true console.log(obj.hasOwnProperty('b')); // true console.log(obj.hasOwnProperty('c')); // false
このプログラムでは、obj
オブジェクトが自身のプロパティとして a
と b
を持っているかどうかを確認しています。c
は存在しないため、false
が返されます。
継承されたプロパティを確認するプログラム
編集以下のプログラムは、Object.prototype.hasOwnProperty()
を使用して継承されたプロパティを確認します。
function Person(name) { this.name = name; } Person.prototype.age = 30; const person = new Person('Alice'); console.log(person.hasOwnProperty('name')); // true console.log(person.hasOwnProperty('age')); // false
このプログラムでは、person
オブジェクトが自身のプロパティとして name
を持っているかどうかを確認しています。age
はプロトタイプチェーンを通じて継承されたプロパティであるため、false
が返されます。
注意点
編集- 列挙不可能なプロパティ:
hasOwnProperty()
は、列挙不可能なプロパティも含めて、オブジェクト自身のプロパティを確認します。 - シンボルプロパティ:
hasOwnProperty()
は、シンボルプロパティも確認できます。 - オブジェクト以外の引数:
hasOwnProperty()
は、オブジェクト以外の値に対して呼び出されると、その値をオブジェクトに変換しようとします。例えば、数値や文字列を渡すと、それらのラッパーオブジェクトのプロパティを確認します。 - オーバーライドのリスク:
hasOwnProperty
メソッドはオーバーライドされる可能性があるため、信頼性を高めるためにObject.prototype.hasOwnProperty.call(obj, prop)
のように呼び出すことが推奨される場合があります。
脚註
編集- ^ これは、プロパティの所有権を確認するために使用されます。
外部リンク
編集