JavaScript: Отладка — функция вывода объекта

2010-09-29

Очень часто при отладке javascript-приложений необходимо просматривать содержимое объектов.

Если стандартная функция вывода сообщений alert() умеет выводить массивы, то с объектами она справляется намного хуже.
Конечно, можно выводить сложные структуры данных в консоль, используя выражение: console.log(), но на данный момент не у всех веб-браузеров есть этот консоль.

В общем, я написал для дебагинга небольшую функцию под названием alertObj(). Как можно догадаться, название произошло от 2 слов: alert и object, то-есть — выдать сообщение с содержимым объекта. Она преобразовывает объект в строку понятную человеку и выводит её стандартным диалоговым сообщением. Ничего сложного.
Кому удобно — используйте на здоровье…

function alertObj(obj) {
var str = "";
for(k in obj) {
str += k+": "+ obj[k]+"\r\n";
}
alert(str);
}

Также, имеется сжатый вариант этой функции, которую можно, к примеру, ввести в адресную строку браузера или в консоль и выполнить, чтобы не внедрять её код в исходники сайта. Это бывает удобно, когда сайт в онлайне и необходимо быстро найти javascript-ошибку. После этого можно просматривать содержимое объектов, пользуясь этой функцией. Конечно, это менее удобно чем внедрить её в код скриптов сайта на время отладки, но тоже — вариант.

javascript: function alertObj(o){var s="";for(k in o){s+=k+": "+o[k]+"\r\n";}alert(s);}



8 комментариев на «JavaScript: Отладка — функция вывода объекта»

  1. Иван:

    Часто объекты многомерны для этого:
    function strObj(obj,prefix,depth) {
    var str = «\r\n\r\n\r\n\r\n\r\n\r\n»;
    for(k in obj) {
    str += prefix+» «+k+»: «+ obj[k]+»\r\n»;
    if(obj[k] && ‘object’ === typeof obj[k] && prefix.length < depth-1) {
    str += strObj(obj[k],prefix+"-",depth)
    }
    }
    return str;
    }

    // Пример
    var t = {"name":"sdf",
    "login":11,
    "fdsf":{"ee":"ee1","22":"11"}
    };
    alert(strObj(t,"",10));

  2. Igor:

    Я тебя обожаю, неделю искал выход, никак не мог редактировать объект, ни html ни text взять, в итоге увидел что outerText пашет и взял его, ОГРОМНОЕ СПАСИБО!

  3. Egor:

    Иван, спасибо.

    Дополню, что система комментариев заменила кавычки на елочки. Кто будет использовать — поправьте.

  4. Дизайнер:

    alertObj(obj) работает но все равно выдает вместе с данными [object Object]

  5. Евгений:

    А что за ‘object’ у Ивана? На что заменить ‘’?

  6. Владимир:

    Прикольно ;) Зачем изобретать велосипед, если в JavaScript уже все есть?
    alert("JSON.stringify = " + JSON.stringify(obj, "", 4));

  7. Матвей:

    Автор лучший!

  8. Грубиян:

    классная дискуссия, а как же быть если внутри объекта имеется функция? Упс надо изобретать велосипед…

Добавить комментарий