/**
* Concatenates the values of a variable into an easily readable string
* by Matt Hackett [scriptnode.com]
* @param {Object} x The variable to debug
* @param {Number} max The maximum number of recursions allowed (keep low, around 5 for HTML elements to prevent errors) [default: 10]
* @param {String} sep The separator to use between [default: a single space ' ']
* @param {Number} l The current level deep (amount of recursion). Do not use this parameter: it's for the function's own use
*/
function print_r(x, max, sep, l) {
l = l || 0;
max = max || 10;
sep = sep || ' ';
if (l > max) {
return "[WARNING: Too much recursion]\n";
}
var
i,
r = '',
t = typeof x,
tab = '';
if (x === null) {
r += "(null)\n";
} else if (t == 'object') {
l++;
for (i = 0; i < l; i++) {
tab += sep;
}
if (x && x.length) {
t = 'array';
}
r += '(' + t + ") :\n";
for (i in x) {
try {
r += tab + '[' + i + '] : ' + print_r(x[i], max, sep, (l + 1));
} catch(e) {
return "[ERROR: " + e + "]\n";
}
}
} else {
if (t == 'string') {
if (x == '') {
x = '(empty)';
}
}
r += '(' + t + ') ' + x + "\n";
}
return r;
};
var_dump = print_r;
// EXAMPLE 1
var myVar1 = {'true' : true, 'false' : false, num : 3};
alert(print_r(myVar1));
// EXAMPLE 2
var myVar2 = [{'legend' : 'zelda'}, {'foo' : {'bar' : null}}, 'a', 'b', [1, 2, { 'key' : 'value'}, 'bill', 'ted']];
alert(print_r(myVar2, 10, "\t"));
// EXAMPLE 3 (this one outputs a LOT, even with a max of 5)
var myVar3 = document.body;
alert(print_r(myVar3, 5));