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
オブジェクトのプロパティ a
と b
が列挙可能であるかどうかを確認しています。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
を返します。
脚註
編集- ^ これは、プロパティの列挙可能性を確認するために使用されます。
外部リンク
編集