javascript实现php的print_r函数

/**
 * 打印关于变量的易于理解的信息。 并将结果输出到页面的底部
 * 对于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;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值