function print_r( array, return_val ) { // Prints human-readable information about a variable
//
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + namespaced by: Michael White (http://crestidg.com)
var output = "", pad_char = " ", pad_val = 4;
var formatArray = function (obj, cur_depth, pad_val, pad_char) {
if(cur_depth > 0)
cur_depth++;
var base_pad = repeat_char(pad_val*cur_depth, pad_char);
var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
var str = "";
if(obj instanceof Array) {
str += "Array\n" + base_pad + "(\n";
for(var key in obj) {
if(obj[key] instanceof Array) {
str += thick_pad + "["+key+"] => "+formatArray(obj[key], cur_depth+1, pad_val, pad_char);
} else {
str += thick_pad + "["+key+"] => " + obj[key] + "\n";
}
}
str += base_pad + ")\n";
} else {
str = obj.toString(); // They didn't pass in an array.... why? -- Do the best we can to output this object.
};
return str;
};
var repeat_char = function (len, char) {
var str = "";
for(var i=0; i < len; i++) { str += char; };
return str;
};
output = formatArray(array, 0, pad_val, pad_char);
if(return_val !== true) {
document.write("<pre>" + output + "</pre>");
return true;
} else {
return output;
}
}
Не совсем понятно условие в коде
if(obj instanceof Array)
в строке 16 и 19. Это препятствует распечатке хэшей (ну и других объектов), а только массивов.
Например
print_r(
{
name: "Sirius",
sex : "male"
},
false
);
напечатает просто [object Object], что ставит под сомнение полезность данной реализации.
Я бы заменил бы первое условие на
if(obj instanceof Array || obj instanceof Object) {
А второе на
if(obj[key] instanceof Array || obj[key] instanceof Object) {
что позволяет распечатывать хэши да и впринципе все объекты, что порой очень полезно при отладке
Мой вариант (не заметил что страницы еще есть кроме первой, вот и написал сам):
очень плохо написано
напечатаете какой-нить элемент из дома и повиснет все. там же есть рекурсивный "all"
а еще не каждое свойство можно получить. нужно так писать тогда так:
try{
print_r(..);
} catch(..) {
console.log(..);
}
А так?
Классная вещь, спасибо, работает отлично, лучше чем вариант в статье!
а я юзаю
console.log(obj)
в консоли фаербага оно отображается как дерево
Пользуюсь такой функцией (спасибо http://www.openjs.com/scripts/others/dump_function_php_print_r.php)
В данном принт_р есть проблемы если в массиве есть функции, и если обьект является одновременно и обьектом и функцией или текстом, вот моя версия без этих проблем...
Roksa strzelin
Roksa kwejk
Roksa czerwionka leszczyny
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.