インタプリタから Python コードを書くときdir()、現在のスコープで定義された名前のリストを入力することができます。firebug、chrome コンソールなどの対話型コンソールを使用してブラウザーから Javascript コードを開発するときに、プログラムで同じ情報を取得するにはどうすればよいですか?
9 に答える
にはkeysメソッドがありますObject。たとえば、次のとおりです。
Object.keys(object)
ただし、これはオブジェクト自身のプロパティとメソッドのみを返します。
オブジェクトのすべてのプロパティとメソッドを一覧表示するには、次の 2 つの可能性を知っています。
console.dir(object)Firefox の firebug コンソールのメソッドとdir(object)Google Chrome 開発ツールのメソッド。
簡単な解決策が必要な場合は、これが役立つ場合があります。
function dir(object) {
stuff = [];
for (s in object) {
stuff.push(s);
}
stuff.sort();
return stuff;
}
ChatZilla のコードには、これを行う関数がいくつかあります。ライセンスを適切にチェックして、それらを切り取ってどこでも使用できるかどうかを確認する必要があります。
関連する関数は
http://hg.mozilla.org/chatzilla/file/59b46c0bf716/js/lib/utils.js#l136
dumpObjectおよびdumpObjectTree
Google Chrome 開発者ツール コンソールには、定義済みのディレクトリがあります: https://developers.google.com/chrome-developer-tools/docs/console
Firebug には console.dir があります: http://getfirebug.com/logging
必要なデータを取得するために使用できる関数がいくつかあります。
Object.keys()
この関数は、シンボルではないすべての列挙可能な所有プロパティを返します。
> let person = {name: 'John Doe', age: 25, [Symbol('Test')] : 'value'}
> Object.keys(person);
['name'] // Note that the Symbol('Test') is not in the returned array!
Object.getOwnPropertyNames()
この関数は、シンボルではない列挙可能および列挙不可能の両方のすべてのプロパティを返します。
> Object.getOwnPropertyNames(Set)
[ 'length', 'name', 'prototype' ]
があるときにこの関数が役立つのはなぜObject.keys()ですか?
> Object.keys(Set)
[] // Because keys doesn't give you non-enumerable properies
余談ですが、 、 、などObject.getOwnPropertyNames(Set)のメソッドを提供しないのはなぜですか? オンになっているためです。はるかに良い結果が得られます。SetaddhasSet.prototypeObject.getOwnPropertyNames(Set.prototype)
Object.getOwnPropertySymbols()
これにより、渡したオブジェクト内の s であるすべての所有プロパティが返されます。Symbol
> let person = {x: 10, Symbol('Test'): 'Test-value' };
> Object.getOwnPropertySymbols(person);
[Symbol(Test)]
Reflect.ownKeys()
これにより、渡したオブジェクトの文字列/シンボルであるすべての所有プロパティが返されます。
> let person = {x: 1, [Symbol('Test')]: 'Test-value'};
> Reflect.ownKeys(person);
[ 'x', Symbol(Test) ]
ボーナス:
Object.getPrototypeOf()
Prototypeこれは、渡されたオブジェクトのを返します。
> let nameable = { name: 'name' };
> let ageable = Object.create(nameable);
> ageable.age = 0;
> let person = Object.create(ageable);
> let proto_of_person = Object.getPrototypeOf(person);
> proto_of_person === ageable;
true
> let proto_of_ageable = Object.getPrototypeOf(proto_of_person);
> proto_of_ageable === nameable
true
これを使用して、オブジェクトとそのプロトタイプ チェーンのすべてのプロパティを再帰的に列挙できます。
グローバル変数は簡単にアクセスできるオブジェクト ( window) に保持されるため、それらを簡単に検査/反復できます。(グレンジャミンが提案した機能のようなものを使用)
一方、関数またはクロージャーで定義されたローカル変数を検査する方法はわかりません。これが可能であれば、少なくともブラウザー/コンソール固有のものになると思います。