オブジェクトダンプJavaScript


89

サードパーティのアドオン/アプリケーション、またはJavaScriptオブジェクトのスクリプトデバッガーでオブジェクトマップのダンプを実行する方法はありますか?

ここに状況があります...私はメソッドが2回呼び出され、そのたびに何かが異なります。何が違うのかはわかりませんが、何か違います。したがって、ウィンドウ(または少なくともwindow.document)のすべてのプロパティをテキストエディターにダンプできれば、2つの呼び出しの状態を単純なファイルdiffで比較できます。考え?


回答:


61

Firebug +console.log(myObjectInstance)


4
...次に、標準のJavaScriptコンソールではなく、Firebugコンソールを調べます。:-)
towi 2012年

3
IEにはコンソールがありますが、オブジェクトをロギングするとが返されます[object Object]。あまり役に立たない
Steve Robbins

5
最近、IEを使用してWebアプリケーションを開発している@SteveRobbinsは誰ですか?個人的には、これまでにInternet Explorerで見つけた唯一の用途は、Windowsオペレーティングシステムを再インストールしたら、実際のWebブラウザーをダウンロードすることです。ちなみに、この平和なソフトウェアをリリースするのはそれだけです。
Darin Dimitrov

8
主要なブラウザをサポートする開発者。問題がIEにのみ存在する場合は、IEでのみテストできるため、ブラウザーを使用する必要があります。
Steve Robbins

2
そして、あなたがnode.jsとターミナルを使用している場合.. Firebugはありませんか?
Cheruvim 2014年

134
console.log("my object: %o", myObj)

そうしないと、文字列表現が表示されることがあります。

[object Object]

またはそのようなもの。


3
ChromeとFirefoxの[オブジェクトオブジェクト]を出力するだけです。<shrug>
slashdottir 2014年

1
@slashdottir ChromeとFFで完全に機能します。私はChromeで少なくとも毎週、たまにFFでそれを使用しています。
Tim

1
@ティム:あなたが正しい、それは動作します。すみません。ユーザーエラー
slashdottir 2014年

これは選択された答えではないのですか?これは4年前の誕生日にjsを使用していなかったときに回答されたことを幸運に思います。
Joey Carson

2
Meteor(サーバー側)ではを出力しmy object: %oます。あまり
役に立た

45
function mydump(arr,level) {
    var dumped_text = "";
    if(!level) level = 0;

    var level_padding = "";
    for(var j=0;j<level+1;j++) level_padding += "    ";

    if(typeof(arr) == 'object') {  
        for(var item in arr) {
            var value = arr[item];

            if(typeof(value) == 'object') { 
                dumped_text += level_padding + "'" + item + "' ...\n";
                dumped_text += mydump(value,level+1);
            } else {
                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
            }
        }
    } else { 
        dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
    }
    return dumped_text;
}

4
再帰呼び出しのように、関数名を変更してコードを更新します。これは、「mydump」の時間を定義しながら「dump」と呼ばれます
Vikas

7
コピーとペースト:binnyva.blogspot.com/2005/10/...
utopianheaven

1
これは、jqueryオブジェクトを調べるために使用すると、「再帰が多すぎる」ことでChromeとFirefoxを殺します
slashdottir 2014年

@slashdottirチェックすることで簡単に修正できますif (level > 10) return level_padding + '<< too deep >>';
John Henckel

「再帰が多すぎます」は循環参照が原因で発生します(1つのオブジェクトの子パラメーターがその親オブジェクトを参照する場合)。現在の値のすべての親を覚えておくことで解決できます。現在の値が親のいずれかに一致する場合は、さらに掘り下げるのをやめます。
Alex Velickiy

42

Chrome、Firefox、またはIE10を使用している場合は、コンソールを拡張して使用してください

(function() {
    console.dump = function(object) {
        if (window.JSON && window.JSON.stringify)
            console.log(JSON.stringify(object));
        else
            console.log(object);
    };
})();

簡潔なクロスブラウザソリューション。


私はこれが好きです。特にオブジェクトダンプをサポートしていないブラウザの場合。
2013年

そして、おそらく「else console.log(object);」を置き換えます。上記のstackoverflow.com/a/3011557/2236012のようにカスタムトラバーサル関数を呼び出しますか?...;)
CB

@CBは「再帰が多すぎます」、そしてフリーズしたブラウザは、FirefoxとChromeでこれを実現します。
slashdottir 2014年

3
JSON.stringifyは循環構造をシリアル化できません。すべてのオブジェクトに対して機能するわけではありません。
Grzegorz Luczywo 2014年

24

ただ使用する:

console.dir(object);

あなたは素晴らしいクリック可能なオブジェクト表現を得るでしょう。ChromeとFirefoxで動作します


1
ChromeとFirefoxが[object Object]を提供
slashdottir 2014年

コンソール(ヒットF12)でテストできconsole.dir({bar:"foo"}); ます。オブジェクトはtoStringメソッドを上書きしますか?
mons droid 14

少なくともコンソールで動作しているようです。おそらく私によるユーザー。ありがとう
slashdottir 2014

そのような甘い機能
トムローン



4

を使用console.log(object)すると、オブジェクトがJavaScriptコンソールにスローされますが、それが常に必要なわけではありません。を使用JSON.stringify(object)すると、変数に格納されるほとんどのものが返されます。たとえば、それをtextarea入力に送信して、コンテンツをサーバーに送信します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.