propertyIsEnumerable

  • リビジョンの URL スラッグ: dummySlug/Reference/Global_Objects/Object/propertyIsEnumerable
  • リビジョンのタイトル: propertyIsEnumerable
  • リビジョンの ID: 368083
  • 作成日:
  • 作成者: ethertank
  • 現行リビジョン いいえ
  • コメント Moved From JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable to dummySlug/Reference/Global_Objects/Object/propertyIsEnumerable

このリビジョンの内容

概要

指定されたプロパティが{{gengoheiki("列挙可能", "enumerable")}} かどうかを示す真偽値を返します。

構文

propertyIsEnumerable(prop) 

パラメータ

prop
調べたいプロパティの名前。

説明

Object の子孫にあたるあらゆるオブジェクトは propertyIsEnumerable メソッドを継承しています。このメソッドはあるオブジェクトのプロパティが for...in ループで列挙可能かどうかを特定することができます。もしオブジェクトが指定されたプロパティを持っていない場合、このメソッドは false を返します。for...in はオブジェクトのプロトタイプチェーンを考慮しますが、このメソッドはオブジェクトのプロトタイプチェーンを通じて継承されたプロパティには利きません。

注記: JavaScript 1.8.1 (Firefox 3.6) より、propertyIsEnumerable("prototype")true でなく false を返します。これは ECMAScript 5 に準じるものです。

例: propertyIsEnumerable の基本的な使い方

以下の例はオブジェクトと配列での propertyIsEnumerable の使い方を示しています。

o = new Object();
a = new Array();
o.prop = 'is enumerable';
a[0] = 'is enumerable';

o.propertyIsEnumerable('prop');   // true を返す
a.propertyIsEnumerable(0);        // true を返す

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

以下の例はユーザー定義プロパティと組み込みプロパティの列挙可能性を実証しています。

a = new Array('is enumerable');

a.propertyIsEnumerable(0);          // true を返す
a.propertyIsEnumerable('length');   // false を返す

Math.propertyIsEnumerable('random');   // false を返す
this.propertyIsEnumerable('Math');     // false を返す

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

var a = [];

a.propertyIsEnumerable('constructor');         // 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');   // true を返す
o.propertyIsEnumerable('method');              // true を返す
o.propertyIsEnumerable('property');            // false を返す

o.property = 'is enumerable';

o.propertyIsEnumerable('property');            // true を返す


/* これらは propertyIsEnumerable が考慮しないプロトタイプであるため、
  (※最後の 2 つはイテレート可能であるにも関わらず)全て false を返します */
o.propertyIsEnumerable('prototype'); // false を返す (as of JS 1.8.1/FF3.6)
o.propertyIsEnumerable('constructor'); // false を返す
o.propertyIsEnumerable('firstMethod'); // false を返す

関連情報

このリビジョンのソースコード

<h2 id="Summary" name="Summary">概要</h2>
<p>指定されたプロパティが{{gengoheiki("列挙可能", "enumerable")}} かどうかを示す真偽値を返します。</p>
<h2 id="Syntax" name="Syntax">構文</h2>
<pre class="syntaxbox">
<code>propertyIsEnumerable(<i>prop</i>) </code></pre>
<h3 id="Parameters" name="Parameters">パラメータ</h3>
<dl>
  <dt>
    <code>prop</code></dt>
  <dd>
    調べたいプロパティの名前。</dd>
</dl>
<h2 id="Description" name="Description">説明</h2>
<p><code>Object</code> の子孫にあたるあらゆるオブジェクトは <code>propertyIsEnumerable</code> メソッドを継承しています。このメソッドはあるオブジェクトのプロパティが <code><a href="ja/JavaScript/Reference/Statements/for...in">for...in</a></code> ループで列挙可能かどうかを特定することができます。もしオブジェクトが指定されたプロパティを持っていない場合、このメソッドは false を返します。<code>for...in</code> はオブジェクトのプロトタイプチェーンを考慮しますが、このメソッドはオブジェクトのプロトタイプチェーンを通じて継承されたプロパティには利きません。</p>

<div class="note">
  <strong>注記:</strong> JavaScript 1.8.1 (Firefox 3.6) より、<code>propertyIsEnumerable("prototype")</code> は <code>true</code> でなく <code>false</code> を返します。これは ECMAScript 5 に準じるものです。</div>

<h2 id="Examples" name="Examples">例</h2>
<h3 id="Example:_A_basic_use_of_propertyIsEnumerable" name="Example:_A_basic_use_of_propertyIsEnumerable">例: <code>propertyIsEnumerable</code> の基本的な使い方</h3>
<p>以下の例はオブジェクトと配列での <code>propertyIsEnumerable</code> の使い方を示しています。</p>
<pre class="brush: js">
o = new Object();
a = new Array();
o.prop = 'is enumerable';
a[0] = 'is enumerable';

o.propertyIsEnumerable('prop');   // true を返す
a.propertyIsEnumerable(0);        // true を返す</pre>
<h3 id="Example:_User-defined_versus_built-in_objects" name="Example:_User-defined_versus_built-in_objects">例: ユーザー定義オブジェクトと組み込みオブジェクト</h3>
<p>以下の例はユーザー定義プロパティと組み込みプロパティの列挙可能性を実証しています。</p>
<pre class="brush: js">
a = new Array('is enumerable');

a.propertyIsEnumerable(0);          // true を返す
a.propertyIsEnumerable('length');   // false を返す

Math.propertyIsEnumerable('random');   // false を返す
this.propertyIsEnumerable('Math');     // false を返す</pre>
<h3 id="Example:_Direct_versus_inherited_properties" name="Example:_Direct_versus_inherited_properties">例: 直接のプロパティと継承されたプロパティ</h3>
<pre class="brush: js">
var a = [];

a.propertyIsEnumerable('constructor');         // 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');   // true を返す
o.propertyIsEnumerable('method');              // true を返す
o.propertyIsEnumerable('property');            // false を返す

o.property = 'is enumerable';

o.propertyIsEnumerable('property');            // true を返す


/* これらは propertyIsEnumerable が考慮しないプロトタイプであるため、
  (※最後の 2 つはイテレート可能であるにも関わらず)全て false を返します */
o.propertyIsEnumerable('prototype'); // false を返す (as of JS 1.8.1/FF3.6)
o.propertyIsEnumerable('constructor'); // false を返す
o.propertyIsEnumerable('firstMethod'); // false を返す</pre>
<h2 id="See_also" name="See_also">関連情報</h2>
<ul>
  <li><a href="/ja/docs/Enumerability_and_ownership_of_properties" title="/ja/docs/Enumerability_and_ownership_of_properties">Enumerability and ownership of properties</a></li>
  <li><a href="/ja/docs/JavaScript/Reference/Statements/for...in" title="JavaScript/Reference/Statements/for...in">for...in</a></li>
  <li><a href="/ja/docs/JavaScript/Reference/Global_Objects/Object/keys" title="JavaScript/Reference/Global Objects/Object/keys">Object.keys</a></li>
  <li><a href="/ja/docs/JavaScript/Reference/Global_Objects/Object/defineProperty" title="JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty()</a></li>
</ul>
Revert to this revision