一个类似与PHP的var_dump函数的方法(打印一个变量的结构-包括复杂的array和object)。..._bahuanwa5356的博客-程序员宅基地

技术标签: php  javascript  

if ( typeof (Class) == ' undefined ' ) ... {
    
var Class = ...{
      create: 
function() ...{
        
return function() ...
          
this.initialize.apply(this, arguments);
        }

      }

    }

}

var  StrR = function (str,len) ... {
    
var Str="";
    
for(var i=0;i<len;i++)
        Str
+=str;
    
return Str;
}


/**/ /*
 * It is a function has similar function of PHP function var_dump
 * @usage:     
     var v=new VAR(xml);// xml is the variable which you want to print out.
    msg=v.dump();       // msg contains the construct of the variable.

 
*/

var  VAR = Class.create();
VAR.prototype 
=   ... {
    initialize: 
function(variable) ...{
        
this.Var = variable;        
    }
,
    
    OL:
function(arg)...{
        
if(arg==null||arg==undefined) return arg;
        
if(arg.length!=undefined)...{
            
return '<i>Array</i> ('+arg.length+')';
        }
else...{
            
var count=0;
            
for(var o in arg)...{
                count
++;
            }

            
return '<i>Object</i> ('+count+')';
        }

    }
,
    
    dumpO:
function(VAr,deepth)...{
        
var rtn="";
        
var prefix=StrR('&nbsp;&nbsp;',deepth);
        
if(VAr==null||VAr==undefined) return prefix+VAr;
        
if(VAr.length!=undefined)...{
            
for(var i=0;i<VAr.length;i++)...{    
                rtn
+=prefix+'['+i+'] =>{ '+this.dump(VAr[i],deepth+1)+prefix+" }<br/>";
            }

        }
else...{
            
var ct=0;
            
for(var o in VAr)...{
                rtn
+=prefix+'<i>'+o+'</i> =>{ '+this.dump(VAr[o],deepth+1)+prefix+" }<br/>";
                ct
++;
            }

        }

        
return rtn;
    }
,
    
    dump:
function()...{
        
var rtn="<pre>";
        
if(typeof(arguments[0])=='undefined')...{
            
var _var=this.Var;
            
var deepth=0;
        }
else...{
            
var _var=arguments[0];
            
var deepth=arguments[1];
        }

        
var prefix=StrR('&nbsp;&nbsp;',deepth);
        
var type = typeof(_var);
        
//document.write(type);
        switch (type)...{
            
case 'string':
            
case 'number':
            
case 'boolean':
                rtn
+=prefix+type+"["+(_var+'').length+"] => "+_var+'<br/>';
                
break;
            
case 'object':
                rtn
+=prefix+this.OL(_var)+' => {<br/>'+this.dumpO(_var,deepth+1)+"<br/>"+prefix+"}<br/>";
                
break;
            
default:
                rtn
+=prefix+type+"["+(_var+'').length+"] => "+_var+' *<br/>';
                
break;
        }
        
        
return rtn+'</pre>';
    }

}

一个例子:

拿我写的那个装载xml到数组的方法(http://tb.blog.csdn.net/TrackBack.aspx?PostId=1806052)装载如下XML(game.xml)到变量xml: 

<? xml version="1.0" encoding="utf-8"  ?>
< Login >
    
< Character >
        
< Text ="热血"  Value ="0" ></ C >
        
< Text ="弱气"  Value ="1" ></ C >
        
< Text ="激情"  Value ="2" ></ C >
        
< Text ="冷静"  Value ="3" ></ C >
        
< Text ="冷酷"  Value ="4" ></ C >
    
</ Character >
    
< Weapon >
        
< Text ="光束剑"  Value ="0" ></ W >
        
< Text ="光束配刀"  Value ="1" ></ W >
    
</ Weapon >
    
< EconomyProperty >
        
< Text ="平均型"  Value ="0" > &nbsp; </ P >
        
< Text ="重视攻击"  Value ="1" > &nbsp; </ P >
        
< Text ="重视敏捷"  Value ="2" > &nbsp; </ P >
        
< Text ="重视防御"  Value ="3" > &nbsp; </ P >
        
< Text ="重视命中"  Value ="4" > &nbsp; </ P >
    
</ EconomyProperty >
</ Login >

装载的代码: 

xml=loadXML('game.xml');

显示变量结构的代码

var v=new VAR(xml);
msg=v.dump();
document.write(msg);

结果:

Array (3) => {
    
[0] =>{
    Object (3) => {
    
$name =>{
        string[9] => Character
}
$value =>{
        null => {
    
null
}
}
C =>{
        Array (5) => {
    
[0] =>{
            Object (4) => {
    
$name =>{
                string[1] => C
}
$value =>{
                null => {
    
null
}
}
Text =>{
                string[2] => 热血
}
Value =>{
                string[1] => 0
}

}
}
[1] =>{
            Object (4) => {
    
$name =>{
                string[1] => C
}
$value =>{
                null => {
    
null
}
}
Text =>{
                string[2] => 弱气
}
Value =>{
                string[1] => 1
}

}
}
[2] =>{
            Object (4) => {
    
$name =>{
                string[1] => C
}
$value =>{
                null => {
    
null
}
}
Text =>{
                string[2] => 激情
}
Value =>{
                string[1] => 2
}

}
}
[3] =>{
            Object (4) => {
    
$name =>{
                string[1] => C
}
$value =>{
                null => {
    
null
}
}
Text =>{
                string[2] => 冷静
}
Value =>{
                string[1] => 3
}

}
}
[4] =>{
            Object (4) => {
    
$name =>{
                string[1] => C
}
$value =>{
                null => {
    
null
}
}
Text =>{
                string[2] => 冷酷
}
Value =>{
                string[1] => 4
}

}
}

}
}

}
}
[1] =>{
    Object (3) => {
    
$name =>{
        string[6] => Weapon
}
$value =>{
        null => {
    
null
}
}
W =>{
        Array (2) => {
    
[0] =>{
            Object (4) => {
    
$name =>{
                string[1] => W
}
$value =>{
                null => {
    
null
}
}
Text =>{
                string[3] => 光束剑
}
Value =>{
                string[1] => 0
}

}
}
[1] =>{
            Object (4) => {
    
$name =>{
                string[1] => W
}
$value =>{
                null => {
    
null
}
}
Text =>{
                string[4] => 光束配刀
}
Value =>{
                string[1] => 1
}

}
}

}
}

}
}
[2] =>{
    Object (3) => {
    
$name =>{
        string[15] => EconomyProperty
}
$value =>{
        null => {
    
null
}
}
P =>{
        Array (5) => {
    
[0] =>{
            Object (4) => {
    
$name =>{
                string[1] => P
}
$value =>{
                null => {
    
null
}
}
Text =>{
                string[3] => 平均型
}
Value =>{
                string[1] => 0
}

}
}
[1] =>{
            Object (4) => {
    
$name =>{
                string[1] => P
}
$value =>{
                null => {
    
null
}
}
Text =>{
                string[4] => 重视攻击
}
Value =>{
                string[1] => 1
}

}
}
[2] =>{
            Object (4) => {
    
$name =>{
                string[1] => P
}
$value =>{
                null => {
    
null
}
}
Text =>{
                string[4] => 重视敏捷
}
Value =>{
                string[1] => 2
}

}
}
[3] =>{
            Object (4) => {
    
$name =>{
                string[1] => P
}
$value =>{
                null => {
    
null
}
}
Text =>{
                string[4] => 重视防御
}
Value =>{
                string[1] => 3
}

}
}
[4] =>{
            Object (4) => {
    
$name =>{
                string[1] => P
}
$value =>{
                null => {
    
null
}
}
Text =>{
                string[4] => 重视命中
}
Value =>{
                string[1] => 4
}

}
}

}
}

}
}

}

参考文章:
javascript解析XML的方法 作者:luke 日期:2007-05-31 URL http://www.lukee.cn/article.asp?id=396

转载于:https://www.cnblogs.com/Iamlein/archive/2007/09/29/2375955.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bahuanwa5356/article/details/102436049

智能推荐

随便推点