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 オブジェクトが自身のプロパティとして ab を持っているかどうかを確認しています。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) のように呼び出すことが推奨される場合があります。

脚註

編集
  1. ^ これは、プロパティの所有権を確認するために使用されます。

外部リンク

編集