.prototype.propertyIsEnumerable()

指定したプロパティが列挙可能(enumerable)か否かの真偽値を返します。

文法

obj.propertyIsEnumerable(prop)
引数 説明
prop 調べる対象のプロパティ名を指定します。

各オブジェクトは、propertyIsEnumerableメソッドを持ちます。 このメソッドはプロトタイプチェーンを通して継承されたプロパティを除き、 指定したオブジェクト内のプロパティが、 for...inループによって列挙されることが出来るプロパティなのかを調べる事が出来ます。 もしオブジェクトが指定されたプロパティを持たない場合は、このメソッドはfalseを返します。

propertyIsEnumerableの基本的な使用例

下記の例は、オブジェクトと配列上でのpropertyIsEnumerableの使用例になります。

var o = {};
var a = [];
o.prop = 'is enumerable';
a[0] = 'is enumerable';

o.propertyIsEnumerable('prop');   // returns true
a.propertyIsEnumerable(0);        // returns true

例: ユーザー定義オブジェクトと組み込みオブジェクトの比較

下記の例は、ユーザー定義オブジェクトと組み込みオブジェクトで、 列挙可能なプロパティについての比較を行っています。

var a = ['is enumerable'];

a.propertyIsEnumerable(0);          // returns true
a.propertyIsEnumerable('length');   // returns false

Math.propertyIsEnumerable('random');   // returns false
this.propertyIsEnumerable('Math');     // returns false

例: 直接的なプロパティと継承されたプロパティの比較

var a = [];
a.propertyIsEnumerable('constructor');  // returns false

function firstConstructor() {
  this.property = 'is not enumerable';
}

firstConstructor.prototype.firstMethod = function () {};

function secondConstructor() {
  this.method = function method() { return 'is enumerable'; };
}

secondConstructor.prototype = new firstConstructor;
secondConstructor.prototype.constructor = secondConstructor;

var o = new secondConstructor();
o.arbitraryProperty = 'is enumerable';

o.propertyIsEnumerable('arbitraryProperty');   // returns true
o.propertyIsEnumerable('method');              // returns true
o.propertyIsEnumerable('property');            // returns false

o.property = 'is enumerable';

o.propertyIsEnumerable('property');            // returns true

// これらはpropertyIsEnumerableが考慮しない、
// prototype上のものであるとしてfalseが返されます。
// 後ろの2つが、for-inで繰り返し処理の対象であっても)
o.propertyIsEnumerable('prototype');   // returns false (as of JS 1.8.1/FF3.6)
o.propertyIsEnumerable('constructor'); // returns false
o.propertyIsEnumerable('firstMethod'); // returns false

仕様

ブラウザ互換性

デスクトップ
機能 Chrome Firefox
(Gecko)
IE Opera Safari
基本
モバイル
機能 Android Chrome for
Android
Firefox
Mobile
IE
Mobile
Opera
Mobile
Safari
Mobile
基本

Gecko特有の注意事項

JavaScript 1.8.1(Firefox 3.6)から、propertyIsEnumerable("prototype")はtrueではなくfalseを返すようになりました。 これはECMAScript 5に準拠した結果になります。

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。