Javascript实现类似PHP的print_r函数

在网上搜了一下,有几种实现思路,还算实用。此文记录备用。

1. muyu的方案

 $(document).ready(function(){
    $('#btn').click(function(){
      var jsonStr = $('#jsonData').val();
      var json = eval('('+jsonStr+')');
      (function(){
        var print_r = function(o, depth) {
          var result = '';
          depth || (depth=1);
          var indent = new Array(4*depth+1).join(' ');
          var indentNext = new Array(4*(depth+1)+1).join(' ');
          var indentNextTwo = new Array(4*(depth+2)+1).join(' ');
          var tmp = '';
          var type = typeof o;
          switch(type) {
            case 'string':
            case 'number':
            case 'boolean':
            case 'undefined':
            case 'function':
              tmp += indent + indentNext + o + "\n";
              break;
            case 'object':
            default:
              for(var key in o) {
                tmp += indentNextTwo + '[' + key + '] = ';
                tmp += print_r(o[key], (depth+1));
              }
          }
          result += type + "\n";
          result += indentNext + '(' + "\n";
          result += tmp;
          result += indentNext + ')' + "\n";
          return result;
        };
        alert(print_r(json));
      }(json));
    });
  });

2. 36ria的方案

function print_r(theObj) {
    var retStr = '';
    if (typeof theObj == 'object') {
        retStr += '<div style="font-family:Tahoma; font-size:7pt;">';
        for (var p in theObj) {
            if (typeof theObj[p] == 'object') {
                retStr += '<div><b>['+p+'] => ' + typeof(theObj) + '</b></div>';
                retStr += '<div style="padding-left:25px;">' + print_r(theObj[p]) + '</div>';
            } else {
                retStr += '<div>['+p+'] => <b>' + theObj[p] + '</b></div>';
            }
        }
        retStr += '</div>';
    }
    return retStr;
}

3. 其他方法

        print_r:function(theObj) {
            var retStr = '';
            if (typeof theObj == 'object'||typeof theObj == 'array') {
                retStr += '<div style="font-family:Tahoma; font-size:7pt;">';
                for (var p in theObj) {
                    if (typeof theObj[p] == 'object' || typeof theObj[p] == 'array') {
                        retStr += '<div><b>['+p+'] => ' + typeof(theObj) + '</b></div>';
                        retStr += '<div style="padding-left:25px;">' + XFUPLOAD.Tools.print_r(theObj[p]) + '</div>';
                    } else {
                        retStr += '<div>['+p+'] => <b>' + theObj[p] + '</b></div>';
                    }
                }
                retStr += '</div>';
            }
            $("body").append(retStr);
        }

使用时需要根据场景略作修改。

posted @ 2012-06-19 12:46  令狐葱★  阅读(388)  评论(0编辑  收藏  举报