.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に準拠した結果になります。
関連項目
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。