JavaScript/Object/prototype/propertyIsEnumerable

Object.prototype.propertyIsEnumerable() は、指定されたプロパティがオブジェクト自身の列挙可能なプロパティであるかどうかを判定するメソッドです。このメソッドは、プロパティが for...in ループで列挙されるかどうかを確認するために使用されます[1]

構文

編集
obj.propertyIsEnumerable(prop)
  • obj: プロパティの列挙可能性を確認する対象のオブジェクト。
  • prop: 確認するプロパティの名前(文字列またはシンボル)。

列挙可能なプロパティを確認するプログラム

編集

以下のプログラムは、Object.prototype.propertyIsEnumerable() を使用して列挙可能なプロパティを確認します。

const obj = {
  a: 1,
  b: 2
};

Object.defineProperty(obj, 'c', {
  value: 3,
  enumerable: false
});

console.log(obj.propertyIsEnumerable('a')); // true
console.log(obj.propertyIsEnumerable('b')); // true
console.log(obj.propertyIsEnumerable('c')); // false

このプログラムでは、obj オブジェクトのプロパティ ab が列挙可能であるかどうかを確認しています。c は列挙不可能なプロパティであるため、false が返されます。

継承されたプロパティを確認するプログラム

編集

以下のプログラムは、Object.prototype.propertyIsEnumerable() を使用して継承されたプロパティを確認します。

function Person(name) {
  this.name = name;
}

Person.prototype.age = 30;

const person = new Person('Alice');

console.log(person.propertyIsEnumerable('name')); // true
console.log(person.propertyIsEnumerable('age'));  // false

このプログラムでは、person オブジェクトのプロパティ name が列挙可能であるかどうかを確認しています。age はプロトタイプチェーンを通じて継承されたプロパティであるため、false が返されます。

注意点

編集
  • 列挙可能性: propertyIsEnumerable() は、プロパティが列挙可能であるかどうかのみを確認します。プロパティがオブジェクト自身のプロパティでない場合、たとえ列挙可能であっても false が返されます。
  • シンボルプロパティ: propertyIsEnumerable() は、シンボルプロパティも確認できます。
  • オブジェクト以外の引数: propertyIsEnumerable() は、オブジェクト以外の値に対して呼び出されると、その値をオブジェクトに変換しようとします。例えば、数値や文字列を渡すと、それらのラッパーオブジェクトのプロパティを確認します。
  • 列挙不可能な組み込みプロパティ: 組み込みオブジェクトの多くのプロパティは列挙不可能であるため、propertyIsEnumerable()false を返します。

脚註

編集
  1. ^ これは、プロパティの列挙可能性を確認するために使用されます。

外部リンク

編集