Очень часто при отладке 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);}
Часто объекты многомерны для этого:
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));
Я тебя обожаю, неделю искал выход, никак не мог редактировать объект, ни html ни text взять, в итоге увидел что outerText пашет и взял его, ОГРОМНОЕ СПАСИБО!
Иван, спасибо.
Дополню, что система комментариев заменила кавычки на елочки. Кто будет использовать — поправьте.
alertObj(obj) работает но все равно выдает вместе с данными [object Object]
А что за ‘object’ у Ивана? На что заменить ‘’?
Прикольно ;) Зачем изобретать велосипед, если в JavaScript уже все есть?
alert("JSON.stringify = " + JSON.stringify(obj, "", 4));
Автор лучший!
классная дискуссия, а как же быть если внутри объекта имеется функция? Упс надо изобретать велосипед…