JS在html中打印所有类型的数据

该博客介绍了一组JavaScript函数,用于格式化和输出数据,包括处理字符串转义、对象特性和类型转换。函数`printf()`用于在HTML环境中格式化显示数据,而`scanf()`则详细地格式化并展示数据的结构,特别适用于查看复杂对象和数组的结构。此外,还讨论了不同浏览器环境下数据查看的局限性。
摘要由CSDN通过智能技术生成
// 返回数据类型详情
function type(s){
  return Object.prototype.toString.call(s)
}
/**
 * 给特殊字符添加转义符:\ ' " \n \r
 * @param s 需要转义的内容
 * @param bool auto;是否在两边添加双引号
 */
function addslash(s,bool){
  s=s.toString().split("\\").join("\\\\").split("'").join("\\'").split('"').join('\\"').split("\n").join("\\n").split("\r").join("\\r")
  return bool ? '"'+s+'"' : s
}

/**
 * 格式化数据,并包括对象特性
 * 注:对象特性名 无引号包裹;与dom元素关联的元素仅显示标签
 * @param a 需要操作的数据
 * @param gap 缩略符
 * @param n (递归时)规定使用多少个缩略符
 * @param bool (递归时)判断是否返回对象类型、剔除函数名
 */
function scanf(a,gap,n,bool){
  var t=typeof a
  if(!a || t !== "object"){
    if(t === "string"){
      a = a ? addslash(a,1) : '""'
    }else if(t === "function"){
      var g="\n"+gap.repeat(n)
      a=a.toString().split(/\n+/).join(g)
      // 可能要剔除函数名
      if(bool) a=a.replace(/^function\s+\w+\s*/,"function ")
    }else a+=""
  }else{
    var t=type(a)
    if(bool && (t ===  "[object HTMLDocument]" || t ===  "[object Window]")) return t
    else if(t === "[object RegExp]") return a
    
    var gr="\n"+gap.repeat(n++),g=gr+gap,r=[],i
    if(t === "[object Array]"){
      var l=a.length
      for(i=0;i<l;i++) r.push(scanf(a[i],gap,n))
      a=l ? "["+g+r.join(","+g)+gr+"]" : "[]"
    }else if(t === "[object Object]"){
      for(i in a){
        r.push(addslash(i,1)+":"+scanf(a[i],gap,n,1))
      }
      a=r.length ? "{"+g+r.join(","+g)+gr+"}" : "{}"
    }else if(bool && t.match(/^\[object HTML\w+Element\]$/)){
      return t+"{"+g+"outerHTML:"+addslash(a.outerHTML,1)+gr+"}"
    }else{
      var ks=Object.keys(a)
      for(i in a){
        r.push(addslash(i,ks.indexOf(i)+1)+":"+scanf(a[i],gap,n,1))
      }
      a=t+(r.length ? "{"+g+r.join(","+g)+gr+"}" : "{}")
    }
  }
  return a
}
// 在html内格式化输出
function printf(a){
  a=scanf(a,"  ",0)
  a=a.split('&').join('&amp;').split('<').join('&lt;').split('>').join('&gt;')
  document.write('<pre>'+a+'</pre>')
}

说明:

  1. IE 不支持 repeat() 方法。有需要可自写方法
  2. HTMLDocument 和 Window 类型相当于超全局变量,且均有属性等于自身,因此仅输出其类型
  3. 特殊object类型输出时,会在前显示类型
  4. 对象特性 无引号包裹,非特性则有
  5. document.all 此数据极其特殊,不建议使用

Js中,打印数据的方法有:console.log(),alert(),document.write(),document.writeln()
其中仅有console.log()可查看数据详情,但是对于移动端和某些低版本浏览器并不友好

【以上为个人原创内容,如需更正,请留言】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值