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

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

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

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

 function parseObjToString(obj){
var filter = ['top', 'window', 'document', 'localStorage', 'sessionStorage', 'cookie'], //不会解析该属性。
x = null, //没用的临时变量
n = '\n<br/>', //换行
Parse = {
parse_obj : function(obj, blank, parse_obj_times){//解析对象和数组
!parse_obj_times && (parse_obj_times = 0);
if (parse_obj_times > 20) {return '';}
switch(typeof obj){
case 'object':
var temp = '{',
isobj = true;
temp += n;
blank = blank || 1;
''+{}.toString.call(obj) === "[object Array]" && (isobj = false);
isobj ? temp = '{'+ n : temp = '['+ n;
for (x in obj) {
if (typeof obj[x] == 'object') {
if(filter.indexOf(x) !== -1 ) continue;
parse_obj_times ++;
temp += this.get_blank(blank)+ x+ ' : '+ this.parse_obj(obj[x], blank+1, parse_obj_times)+ ',' + n;
}else{
temp += this.get_blank(blank)+ x+ ' : '+ this.parse_sign(obj[x]) +',' + n;
}
}
temp = temp.substr(0, temp.length - (',' + n).length)+ n;
return temp + this.get_blank(blank - 1) + (isobj ? '}' : ']') ;
default :
return obj;
}
},
parse_sign: function(str){//解析特殊符号
return (''+str).replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\n|\n\r/g, '<br>')
.replace(/\t/g, '&nbsp;&nbsp;').replace(/\s\s/g, '&nbsp;');
},
get_blank : function(num){//返回相应num的空白
for (var i = 0, blank=''; i < num; i++) {
blank += '&nbsp;&nbsp;&nbsp;&nbsp;';
}
return blank;
}
};
return Parse.parse_obj(obj);
}

测试数据:

 var obj = {
test : {
a : 'hello',
b : 'world',
c : {
d : {
e: {
f: {
g: {
h : {
i : {
shit : 'yes shit'
}
}
}
}
}
}
}
},
arr : [
'what',
'a',
'abc',
'<aaa><bbb>',
'a<asdfsafd>'
],
func : function(e){
console.log('aaaa');
},
func2: function(e){
console.log('bbbb');
},
func3: function(e){
console.log('asdfs');
}
}; var str = parseObjToString(obj);;
document.write(str);

测试结果:

模仿console自写函数打印js的对象的更多相关文章

  1. js中console在一行内打印字符串和对象

    在前端开发中,大多数的调试一般都是F12中的console和network中查看请求数据和响应数据,也有一部分人喜欢用debugger. 在开发大一些的项目时,在开发环境下,打开着控制台,切换一下页面 ...

  2. 【JS】#001 JS定义对象写法(原型、JSON方式)

    下面主要写两种 JS 定义对象的 常用写法 写法1:[很像面向对象语言中的写法] function zhongxia(age) { this.age = age; } zhongxia.name = ...

  3. 常见的JS手写函数汇总(代码注释、持续更新)

    最近在复习面试中常见的JS手写函数,顺便进行代码注释和总结,方便自己回顾也加深记,内容也会陆陆续续进行补充和改善. 一.手写深拷贝 <script> const obj1 = { name ...

  4. JS调用函数时候加括号与只写函数名字的区别 fn与fn()的区别

    经常见插件里面函数调用的时候只写个函数名字,不写函数参数,甚至连括号也不写,比如说: <!DOCTYPE html> <html> <head> <meta ...

  5. JS函数 函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名。

    函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名. 第一种情况:在<script>标签内调用. <script type="text/java ...

  6. JavaScript的使用以及JS常用函数(JS 遍历数组和集合)

    JavaScript入门 学习总结 1. 什么是 JavaScript 2. JavaScript 的特点 3. JS的使用 编写位置 基本语法 变量 打印变量 数据类型 innerHTML和inne ...

  7. 从window.console&&console.log(123)浅谈JS的且运算逻辑(&&)

    一.JS的且运算记得最开始看到window.console&&console.log(123),当时知道能起什么作用但是没有深入研究,最近在研究后总算弄明白了.要理解这个,首先得明白三 ...

  8. JS 字符串对象 数组对象 函数对象 函数作用域

    一.内置对象 object对象:ECMAScript 中的所有对象都由这个对象继承而来:Object 对象中的所有属性和方法都会出现在其他对象中 ToString() : 返回对象的原始字符串表示.V ...

  9. 自定义Chrome的console(样式、打印图片、开关)

    1.常用console类型 console.log() 常规打印 console.warn() 打印警告信息 console.error() 打印错误信息 console.time() 和 conso ...

随机推荐

  1. CodeForces 474B E(Contest #1)

    题意: 给你一个数n,代表n段区间,接下来有n个数(a1,a2,...an)代表每段区间的长度,第一段区间为[1,a1],第二段区间为[a1+1,a1+a2],...第i段区间为[ai-1+1,ai- ...

  2. HOJ 1001: A+B; 1002: A+B+C

    两道水题,用来熟悉 HOJ 的提交系统. 1001:输入两个整数 A, B (0 <= A,B <= 10),输出 A+B. #include <iostream> using ...

  3. 动态加载jQuery

    success: function(data){ for(var i in data){ $('.x-details>ul:eq(0)').append("<li>&quo ...

  4. 解决eclipse中自带的maven搜索不到非本地第三方包问题

     解决eclipse中自带的maven搜索不到非本地第三方包问题   版权声明:本文为博主原创文章,未经博主允许不得转载. 最近使用eclipse中的maven插件时发现,在pom.xml文件中添加第 ...

  5. CSS之transition过渡练习

    代码: <!DOCTYPE html><html><head> <title>transition</title> <meta cha ...

  6. JS 4 新特性:混合属性(mixins)

    Ext JS4的新特征1:混合属性(mixins) 组合是Extjs4的新特性,可用于实现多继承的情况.该属性会以同步方式加载类文件,并实例化该类(译者推理其内部使用Ext.create方法).直接上 ...

  7. MYSQL 处理批量更新数据的一些经验。

    首先,我们需要了解下MYSQL CASE EXPRESSION 语法. 手册传送门:http://dev.mysql.com/doc/refman/5.7/en/control-flow-functi ...

  8. Three.js入门

    一.前段时候花了些功夫研究了下WebGL,了解了基本实体的实现原理和实现方法,现在回忆就只记得如果要我画个圆形,怀疑都要了我的命(那得画多少个三角形...).功夫不负有心人,今天学习Three.js得 ...

  9. 学习Find函数和select

    Find函数其实就类似于在excel按下Ctrl+F出现的查找功能:在某个区域中查找你要找的字符,一旦找到就定位到第一个对应的单元格.所以Find函数的返回值是个单元格,也就是个range值.举例,s ...

  10. Mac下手动安装Chromedriver.exe

    Mac OS X Yosemite 10.10.4下,ChromeDriver运行异常,需要手动安装chromedriver.exe Step 1: 打开https://sites.google.co ...