58

インタプリタから Python コードを書くときdir()、現在のスコープで定義された名前のリストを入力することができます。firebug、chrome コンソールなどの対話型コンソールを使用してブラウザーから Javascript コードを開発するときに、プログラムで同じ情報を取得するにはどうすればよいですか?

4

9 に答える 9

39

にはkeysメソッドがありますObject。たとえば、次のとおりです。

Object.keys(object)

ただし、これはオブジェクト自身のプロパティとメソッドのみを返します。
オブジェクトのすべてのプロパティとメソッドを一覧表示するには、次の 2 つの可能性を知っています。

  1. console.dir(object)Firefox の firebug コンソールのメソッドと
  2. dir(object)Google Chrome 開発ツールのメソッド。
于 2012-06-18T17:33:37.177 に答える
20

簡単な解決策が必要な場合は、これが役立つ場合があります。

function dir(object) {
    stuff = [];
    for (s in object) {
        stuff.push(s);
    }
    stuff.sort();
    return stuff;
}
于 2011-05-29T08:30:52.783 に答える
8

ChatZilla のコードには、これを行う関数がいくつかあります。ライセンスを適切にチェックして、それらを切り取ってどこでも使用できるかどうかを確認する必要があります。

関連する関数は http://hg.mozilla.org/chatzilla/file/59b46c0bf716/js/lib/utils.js#l136 dumpObjectおよびdumpObjectTree

于 2011-04-02T14:37:52.237 に答える
5

Google Chrome 開発者ツール コンソールには、定義済みのディレクトリがあります: https://developers.google.com/chrome-developer-tools/docs/console

Firebug には console.dir があります: http://getfirebug.com/logging

于 2012-04-26T08:36:56.293 に答える
2

必要なデータを取得するために使用できる関数がいくつかあります。

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

これを使用して、オブジェクトとそのプロトタイプ チェーンのすべてのプロパティを再帰的に列挙できます。

于 2021-07-19T08:02:19.850 に答える
2

グローバル変数は簡単にアクセスできるオブジェクト ( window) に保持されるため、それらを簡単に検査/反復できます。(グレンジャミンが提案した機能のようなものを使用)

一方、関数またはクロージャーで定義されたローカル変数を検査する方法はわかりません。これが可能であれば、少なくともブラウザー/コンソール固有のものになると思います。

于 2011-04-02T17:37:54.450 に答える