Object.getOwnPropertyDescriptor() メソッドは、与えられたオブジェクト自身のプロパティ (すなわちオブジェクトが直接提供するプロパティであり、オブジェクトのプロトタイプチェインを伝って提供されるプロパティではありません) の、プロパティディスクリプターを返します。

構文

Object.getOwnPropertyDescriptor(obj, prop)

引数

obj
プロパティの確認を行うオブジェクトです。
prop
ディスクリプターを受け取るプロパティの名前または Symbol です。

返値

指定されたプロパティがオブジェクトにある場合は、プロパティディスクリプターで、それ以外の場合は undefined です。

説明

このメソッドで、プロパティの正確な定義を確認することができます。 JavaScript のプロパティは、文字列値の名前または Symbol とプロパティディスクリプターから成ります。プロパティディスクリプターおよびその属性についての詳細情報は、 Object.defineProperty() にあります。

プロパティディスクリプターは、以下の属性のいくつかを記録したものです。

value
プロパティに関連づけられた値です (データディスクリプタのみ)。
writable
true である場合、プロパティに関連づけられた値は変更することができます (データディスクリプターのみ)。
get
プロパティの getter として提供する関数、あるいは getter がない場合は undefined です (アクセサディスクリプターのみ)。
set
プロパティの setter として提供する関数、あるいは setter がない場合は undefined です (アクセサディスクリプターのみ)。
configurable
true である場合、この種のディスクリプターを変更することや、対応するオブジェクトからプロパティを削除することができます。
enumerable
true である場合、このプロパティは対応するオブジェクトでのプロパティ列挙に現れます。

var o, d;

o = { get foo() { return 17; } };
d = Object.getOwnPropertyDescriptor(o, 'foo');
// d is {
//   configurable: true,
//   enumerable: true,
//   get: /*the getter function*/,
//   set: undefined
// }

o = { bar: 42 };
d = Object.getOwnPropertyDescriptor(o, 'bar');
// d is {
//   configurable: true,
//   enumerable: true,
//   value: 42,
//   writable: true
// }

o = { [Symbol.for('baz')]: 73 }
d = Object.getOwnPropertyDescriptor(o, Symbol.for('baz')); 
// d is {
//   configurable: true,
//   enumerable: true,
//   value: 73,
//   writable: true
// }

o = {};
Object.defineProperty(o, 'qux', {
  value: 8675309,
  writable: false,
  enumerable: false
});
d = Object.getOwnPropertyDescriptor(o, 'qux');
// d is {
//   value: 8675309,
//   writable: false,
//   enumerable: false,
//   configurable: false
// }

メモ

ECMAScript 5 では、このメソッドへの最初の引数がオブジェクトでない (プリミティブである) 場合は、 TypeError が発生します。 ECMAScript 2015 では、最初の引数がオブジェクトでなくても、最初に強制的にオブジェクトに変換します。

Object.getOwnPropertyDescriptor('foo', 0);
// TypeError: "foo" is not an object  // ES5 code

Object.getOwnPropertyDescriptor('foo', 0);
// Object returned by ES2015 code: {
//   configurable: false,
//   enumerable: true,
//   value: "f",
//   writable: false
// }
}

Specifications

仕様書 状態 備考
ECMAScript 5.1 (ECMA-262)
Object.getOwnPropertyDescriptor の定義
標準 初回定義。 JavaScript 1.8.5 で実装。
ECMAScript 2015 (6th Edition, ECMA-262)
Object.getOwnPropertyDescriptor の定義
標準
ECMAScript Latest Draft (ECMA-262)
Object.getOwnPropertyDescriptor の定義
ドラフト

ブラウザーの対応

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応5 あり48125
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応 あり あり あり4 あり あり あり

関連情報

ドキュメントのタグと貢献者

このページの貢献者: mfuji09, teoli, yyss
最終更新者: mfuji09,