All pastes #2076897 Raw Edit

Untitled

public text v1 · immutable
#2076897 ·published 2011-06-08 19:20 UTC
rendered paste body

/**
 * 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));