zoukankan      html  css  js  c++  java
  • 模仿console自写函数打印js的对象

    本以为写个递归函数就可以将js的对象打印出来。

    当然第一个想到的估计是JSON.stringify() 这个函数。但这个函数打印到浏览器 显示效果不友好。最友好的显示肯定是 控制台打印咯。

    结果尝试打印window的时候,直接挂逼。原因就是对象循环引用。

    经过几次修改,还是禁止了window里的某几个属性。

     1 function parseObjToString(obj){
     2     var filter = ['top', 'window', 'document', 'localStorage', 'sessionStorage', 'cookie'], //不会解析该属性。
     3      x         = null, //没用的临时变量
     4      n         = '
    <br/>', //换行
     5      Parse     = {
     6         parse_obj : function(obj, blank, parse_obj_times){//解析对象和数组
     7             !parse_obj_times && (parse_obj_times = 0);
     8             if (parse_obj_times > 20) {return '';}
     9             switch(typeof obj){
    10                 case 'object':
    11                     var temp   = '{',
    12                         isobj  = true;
    13                         temp  += n;
    14                         blank  = blank || 1;
    15                     ''+{}.toString.call(obj) === "[object Array]" && (isobj = false);
    16                     isobj ? temp = '{'+ n : temp = '['+ n;
    17                     for (x in obj) {
    18                         if (typeof obj[x] == 'object') {
    19                             if(filter.indexOf(x) !== -1 ) continue;
    20                             parse_obj_times ++;
    21                             temp += this.get_blank(blank)+ x+ ' : '+ this.parse_obj(obj[x], blank+1, parse_obj_times)+ ',' + n;
    22                         }else{
    23                             temp += this.get_blank(blank)+ x+ ' : '+ this.parse_sign(obj[x]) +',' + n;
    24                         }
    25                     }
    26                     temp = temp.substr(0, temp.length - (',' + n).length)+ n;
    27                     return temp + this.get_blank(blank - 1) + (isobj ? '}' : ']') ;
    28                 default : 
    29                   return obj;
    30             }
    31         },
    32         parse_sign: function(str){//解析特殊符号
    33             return (''+str).replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/
    |
    
    /g, '<br>')
    34                            .replace(/	/g, '&nbsp;&nbsp;').replace(/ss/g, '&nbsp;');
    35         },
    36         get_blank : function(num){//返回相应num的空白
    37             for (var i = 0, blank=''; i < num; i++) {
    38                 blank += '&nbsp;&nbsp;&nbsp;&nbsp;';
    39             }
    40             return blank;
    41         }
    42     };
    43     return Parse.parse_obj(obj);
    44 }

    测试数据:

     1 var obj = {
     2         test : {
     3             a : 'hello',
     4             b : 'world',
     5             c : {
     6                 d : {
     7                     e: {
     8                         f: {
     9                             g: {
    10                                 h : {
    11                                     i : {
    12                                         shit : 'yes shit'
    13                                     }
    14                                 }
    15                             }
    16                         }
    17                     }
    18                 }
    19             }
    20         },
    21         arr : [
    22             'what',
    23             'a',
    24             'abc',
    25             '<aaa><bbb>',
    26             'a<asdfsafd>'
    27         ],
    28         func : function(e){
    29             console.log('aaaa');
    30         },
    31         func2: function(e){
    32             console.log('bbbb');
    33         },
    34         func3: function(e){
    35             console.log('asdfs');
    36         }
    37     };
    38 
    39 var str = parseObjToString(obj);;
    40 document.write(str);

    测试结果:

  • 相关阅读:
    [CQOI2015]选数
    利用匈牙利算法&HopcroftKarp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES
    玩家死亡,屏幕灰白效果实现
    Bool值相加
    (转)D3D性能优化
    Flash AS3视频教程
    Accurately Profiling Direct3D API Calls (Direct3D 9)
    菲涅尔反射
    sscanf时用到郁闷问题
    如何精确测量程序运行时间(转)
  • 原文地址:https://www.cnblogs.com/songbyjson/p/5139196.html
Copyright © 2011-2022 走看看