JavaScript дамп об’єкта


89

Чи існує стороння надбудова / додаток чи якийсь спосіб виконати зливання мапи об’єктів в налагоджувачі сценаріїв для об’єкта JavaScript?

Ось ситуація ... У мене метод викликається двічі, і з кожним часом щось інше. Я не впевнений, що відрізняється, але щось є. Отже, якби я зміг скинути всі властивості window (або принаймні window.document) у текстовий редактор, я міг би порівняти стан між двома викликами за допомогою простого файлу diff. Думки?


Відповіді:


61

Firebug +console.log(myObjectInstance)


4
... а потім перегляньте консоль Firebug, а не стандартну консоль Javascript . :-)
towi

3
IE має консоль, але реєстрація об'єкта повертається [object Object]. Не дуже корисно
Стів Роббінс

5
@SteveRobbins, хто сьогодні використовує IE для розробки веб-додатків? Особисто єдиним способом використання, який я знайшов для Internet Explorer, є завантаження справжнього веб-браузера, як тільки я переінсталюю свою операційну систему Windows. До речі, це єдиний раз, коли я запускаю цей мир програмного забезпечення.
Дарін Димитров

8
Будь-який розробник, який підтримує основні браузери. Якщо проблема існує лише в IE, її можна протестувати лише в IE, тому вам доведеться використовувати браузер.
Steve Robbins

2
А якщо ви використовуєте node.js і термінал .. Немає firebug ??
Херувім,

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

В іншому випадку ви отримаєте рядкове представлення, яке іноді відображає:

[object Object]

або якийсь такий.


3
просто друкує [object Object] для Chrome та Firefox. <shrug>
slashdottir

1
@slashdottir Це абсолютно працює в Chrome і FF. Я використовую його в Chrome принаймні щотижня, а іноді і в FF.
Тім

1
@Tim: ти маєш рацію, це працює. будь ласка, вибачте мене. 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

1
це вбиває Chrome та Firefox із "занадто великою рекурсією", коли використовується для дослідження об'єкта jquery
slashdottir

@slashdottir це легко виправити, перевірившиif (level > 10) return level_padding + '<< too deep >>';
John Henckel

"Занадто багато рекурсії" трапляється через циклічне посилання (коли дочірній параметр одного об'єкта посилається на свій батьківський об'єкт). Це можна вирішити, запам'ятавши всіх батьків поточного значення, і якщо поточне значення відповідає одному з батьків, припиніть копати далі.
Алекс Веліцький,

42

Якщо ви користуєтеся Chrome, Firefox або IE10 +, чому б не розширити консоль і не використовувати

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

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


Мені цей подобається. Особливо для браузера, який не підтримує демпінг об’єктів.
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 Object]
slashdottir

Ви можете перевірити це в консолі (хіт F12) за допомогою пункту console.dir({bar:"foo"}); Чи замінює ваш об'єкт метод toString?
mons droid

здається, працює щонайменше в консолі. ймовірно користувач мною. дякую
slashdottir

така солодка риса
сама по собі



4

Використання console.log(object)перекине ваш об’єкт на консоль Javascript, але це не завжди те, що ви хочете. Використання JSON.stringify(object)поверне більшість речей, які будуть збережені у змінній, наприклад, щоб відправити їх на вхід текстової області та надіслати вміст назад на сервер.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.