/**
* 打印关于变量的易于理解的信息。 并将结果输出到页面的底部
* 对于window,document的html Object只能输出一维,function类型数据可以输出一维的属性,全部输出会死机
* @param {type} vars 变量
* @param {type} is_return
* @returns {String}
*/
function print_r(vars) {
var var_type = getType(vars);
var str = '';
var table = document.createElement('table');
table.width = "100%";
table.setAttribute('cellpadding', '0');
table.setAttribute('cellspacing', '0');
table.setAttribute('border', '0');
document.body.appendChild(table);
table.innerHTML = '<tbody><tr><td id="print_r_now_show"></td></tr><tr><td id="print_r_all_show"></td></tr></tbody>';
if (var_type == 'function' || (typeof vars == "object" && vars !== null) || (var_type == 'array' && parseInt(vars.length) > 0)) {//判读是否为数组
var br = '<br/>';//换行符号
var weidu = 0;
var arr = [];
(function(vars, key) {
var type = getType(vars);
var inp = str_repeat(' ', weidu);
var inp2 = str_repeat(' ', weidu + 1);
key = key ? br + inp + '[' + key + ']=>' : '';
str += inp + key + type + '(' + br;
for (var k in vars) {
document.getElementById('print_r_now_show').innerHTML = vars[k];
var ktype = getType(vars[k]);
if (((ktype == "object" && vars[k] !== null) || (ktype == 'array' && parseInt(vars[k].length) > 0)) && weidu < 1) {
str += arr.join(',' + br);
arr = [];
weidu++;
arguments.callee(vars[k], k);
} else {
arr.push(inp2 + '[' + k + ']=>' + String(vars[k]));
}
}
str += arr.join(',' + br);
arr = [];
str += br + inp + ')' + br;
weidu--;
})(vars);
var re = new RegExp(br + '( )*' + br, 'g');//去除多余换行符
str = str.replace(re, br);
} else {
str = var_type + '(' + String(vars) + ')';
}
document.getElementById('print_r_all_show').innerHTML = str;
}
/**
* 重复一个字符串
* @param {type} str 要重复的字符串
* @param {type} n 重复次数
* @returns {String}
*/
function str_repeat(str, n) {
var ren = '';
for (var i = 0; i < n; i++) {
ren += str;
}
return ren;
}
/**
* 获取变量的数据类型
* @param {type} vars
* @returns {unresolved}
*/
function getType(vars) {
var type = typeof vars;
if (type == 'object') {
var type2 = Object.prototype.toString.call(vars);
if (type2 == '[object Array]') {
type = 'array';
} else if (type2 == '[object Object]') {
type = 'object';
} else {
type = type2.replace(/[\[\]]/gi, '');
}
}
return type;
}