グローバルオブジェクト
グローバル変数とは「グローバルオブジェクトのプロパティ」です。
ブラウザでは「グローバルオブジェクト」は「window
オブジェクト」を指します。
コンソールに出力する場合、[[Prototype]]
にも注意して確認してください。
プロトタイプチェーンによって、[[Prototype]]
上にあるプロパティも「windowのプロパティ」として扱われ、グローバル変数となります。
プロパティの列挙
for-in
文は「プロトタイプチェーン上のプロパティ」を含めて列挙しますが、「列挙不可能なプロパティ」「Symbolのプロパティ」を列挙しません。
Object.getOwnPropertyNames()
は「列挙不可能なプロパティ」「Symbolのプロパティ」も列挙しますが、「プロトタイプチェーン上のプロパティ」を列挙しません。
全てを列挙するには、[[Prototype]]
を辿りながら、Object.getOwnPropertyNames()
を実行する必要があります。
javascript
1function getPropertyNames(object) {
2 const propertyNames = new Set(Object.getOwnPropertyNames(object));
3
4 while (object = Object.getPrototypeOf(object)) {
5 for (let key of Object.getOwnPropertyNames(object)) {
6 propertyNames.add(key);
7 }
8 }
9
10 return propertyNames;
11}
12
13console.log(getPropertyNames(window));
Re: yuki_90453 さん
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。