Объектный дамп JavaScript

89

Есть ли надстройка / приложение стороннего производителя или какой-либо способ выполнить дамп карты объекта в отладчике скриптов для объекта JavaScript?

Вот такая ситуация ... У меня метод вызывается дважды, и каждый раз что-то меняется. Я не уверен, что отличается, но что-то есть. Итак, если бы я мог выгрузить все свойства окна (или хотя бы window.document) в текстовый редактор, я мог бы сравнить состояние между двумя вызовами с простым файлом diff. Мысли?

Джесси Хоул
источник
Возможный дубликат Как я могу отобразить объект JavaScript?
Ян Худек

Ответы:

61

Firebug +console.log(myObjectInstance)

Дарин Димитров
источник
4
... а затем загляните в консоль Firebug, а не в стандартную консоль Javascript . :-)
Towi
3
В IE есть консоль, но запись объекта возвращается [object Object]. Не очень полезно
Стив Роббинс
5
@SteveRobbins, кто сейчас использует IE для разработки веб-приложений? Лично я пока что нашел единственное применение Internet Explorer - это загрузить настоящий веб-браузер после переустановки операционной системы Windows. Кстати, это единственный раз, когда я запускаю этот мир софта.
Дарин Димитров
8
Любой разработчик, поддерживающий основные браузеры. Если проблема существует только в IE, ее можно протестировать только в IE, поэтому вам нужно использовать браузер.
Стив Роббинс,
2
А если вы используете node.js и терминал .. Firebug отсутствует ??
Cheruvim
136
console.log("my object: %o", myObj)

В противном случае вы получите строковое представление, иногда отображающее:

[object Object]

или что-то в этом роде.

Тим
источник
3
просто печатает [объект объекта] для Chrome и Firefox. <shrug>
slashdottir
1
@slashdottir Абсолютно работает в Chrome и FF. Я использую его в Chrome хотя бы раз в неделю, а иногда и в FF.
Тим
1
@ Тим: ты прав, это работает. пожалуйста извините меня. user err
slashdottir
Как, черт возьми, это не выбранный ответ? Мне повезло, что на этот вопрос ответили в мой день рождения 4 года назад, когда я не использовал js.
Джои Карсон
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»
Викас
7
Скопируйте и вставьте: binnyva.blogspot.com/2005/10/…
utopianheaven 08
1
это убивает Chrome и Firefox «слишком большой рекурсией» при использовании для проверки объекта jquery
slashdottir
@slashdottir, это легко исправить, проверивif (level > 10) return level_padding + '<< too deep >>';
Джон Хенкель
«Слишком большая рекурсия» происходит из-за циклической ссылки (когда дочерний параметр одного объекта ссылается на его родительский объект). Можно решить, запомнив всех родителей текущего значения, и если текущее значение совпадает с одним из родителей, прекратите копать дальше.
Alex Velickiy 06
42

Если вы используете Chrome, Firefox или IE10 +, почему бы не расширить консоль и не использовать

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

для краткого кросс-браузерного решения.

Крис HG
источник
Мне нравится этот. Специально для браузеров, не поддерживающих дамп объектов.
Aley
И, возможно, замените "else console.log (object);" с вызовом настраиваемой функции обхода, как в stackoverflow.com/a/3011557/2236012 выше? ...;)
CB
@CB "слишком много рекурсии" и зависший браузер - вот что меня вызывает в Firefox и Chrome.
slashdottir
3
JSON.stringify не может сериализовать циклические структуры. Это подойдет не для всех объектов.
Grzegorz Luczywo
24

Просто используйте:

console.dir(object);

вы получите красивое интерактивное представление объекта. Работает в Chrome и Firefox

монс дроид
источник
1
Chrome и Firefox предоставляют [объект Object]
slashdottir
Вы можете протестировать его в консоли (нажмите F12) с помощью параметра " console.dir({bar:"foo"}); Заменяет ли ваш объект метод toString?"
mons droid
похоже, по крайней мере, работает в консоли. наверное userr мной. спасибо
slashdottir
такая милая особенность
tomalone
12

Для Chrome / Chromium

console.log(myObj)

или это эквивалент

console.debug(myObj)
Казновац
источник
4

Использование console.log(object)приведет к переносу вашего объекта в консоль Javascript, но это не всегда то, что вам нужно. Использование JSON.stringify(object)вернет большую часть данных, которые будут сохранены в переменной, например, для отправки его на ввод текстового поля и отправки содержимого обратно на сервер.

Себастьян
источник