模仿console自写函数打印js的对象
本以为写个递归函数就可以将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, '<').replace(/>/g, '>').replace(/\n|\n\r/g, '<br>')
.replace(/\t/g, ' ').replace(/\s\s/g, ' ');
},
get_blank : function(num){//返回相应num的空白
for (var i = 0, blank=''; i < num; i++) {
blank += ' ';
}
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的对象的更多相关文章
- js中console在一行内打印字符串和对象
在前端开发中,大多数的调试一般都是F12中的console和network中查看请求数据和响应数据,也有一部分人喜欢用debugger. 在开发大一些的项目时,在开发环境下,打开着控制台,切换一下页面 ...
- 【JS】#001 JS定义对象写法(原型、JSON方式)
下面主要写两种 JS 定义对象的 常用写法 写法1:[很像面向对象语言中的写法] function zhongxia(age) { this.age = age; } zhongxia.name = ...
- 常见的JS手写函数汇总(代码注释、持续更新)
最近在复习面试中常见的JS手写函数,顺便进行代码注释和总结,方便自己回顾也加深记,内容也会陆陆续续进行补充和改善. 一.手写深拷贝 <script> const obj1 = { name ...
- JS调用函数时候加括号与只写函数名字的区别 fn与fn()的区别
经常见插件里面函数调用的时候只写个函数名字,不写函数参数,甚至连括号也不写,比如说: <!DOCTYPE html> <html> <head> <meta ...
- JS函数 函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名。
函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名. 第一种情况:在<script>标签内调用. <script type="text/java ...
- JavaScript的使用以及JS常用函数(JS 遍历数组和集合)
JavaScript入门 学习总结 1. 什么是 JavaScript 2. JavaScript 的特点 3. JS的使用 编写位置 基本语法 变量 打印变量 数据类型 innerHTML和inne ...
- 从window.console&&console.log(123)浅谈JS的且运算逻辑(&&)
一.JS的且运算记得最开始看到window.console&&console.log(123),当时知道能起什么作用但是没有深入研究,最近在研究后总算弄明白了.要理解这个,首先得明白三 ...
- JS 字符串对象 数组对象 函数对象 函数作用域
一.内置对象 object对象:ECMAScript 中的所有对象都由这个对象继承而来:Object 对象中的所有属性和方法都会出现在其他对象中 ToString() : 返回对象的原始字符串表示.V ...
- 自定义Chrome的console(样式、打印图片、开关)
1.常用console类型 console.log() 常规打印 console.warn() 打印警告信息 console.error() 打印错误信息 console.time() 和 conso ...
随机推荐
- Uart、SPI和I2C的区别
串口通信:UART.SPI.I2C区别[引用] 1.UART就是两线,一根发送一根接收,可以全双工通信,线数也比较少.数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快.在多机通信上面 ...
- 算法导论----贪心算法,删除k个数,使剩下的数字最小
先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4, ...
- java发送http的get、post请求[转]
原文链接:http://www.cnblogs.com/zhuawang/archive/2012/12/08/2809380.html package wzh.Http; import java.i ...
- Scala深入浅出实战经典-----002Scala函数定义、流程控制、异常处理入门实战
002-Scala函数定义.流程控制.异常处理入门实战 Scala函数定义 语句结束无分号 定义无参函数 def 函数名称(参数名称:参数类型)[:Unit=]{ 函数体 } 老师的代码 我的实际代码 ...
- 使用NSJSONSerialization将数组或字典转为字符串
IOS中将数组或字典转为字符串可以用NSJSONSerialization,代码如下: NSData* data = [NSJSONSerialization dataWithJSONObject:a ...
- Ajax与Comet
1.Ajax核心? XHR >>1.新建XMLHttpRequest >>2.open(),接受3个参数. >>3.send(),接受1个参数. >>4 ...
- Dapper学习笔记(3)-增、删、改、查
一.建表 在数据库中建立如下三张表: CREATE TABLE [dbo].[T_User] ( , ) PRIMARY KEY NOT NULL, ) NOT NULL, ) NULL, ) NUL ...
- NGUI如何使2D图片按像素1:1显示在屏幕上
NGUI版本为3.5.1. 将camera 设置为正交模式,size值设为1. UIRoot(2D)有3种缩放样式: 1.PixelPerfect.UI严格按照指定的像素大小显示,不会随着屏幕的分辨率 ...
- UVa 1391 Astronauts (2SAT)
题意:给出一些宇航员他们的年龄,x是他们的平均年龄,其中A任务只能给年龄大于等于x的人,B任务只能给小于x的人,C任务没有限制.再给出m对人,他们不能同任务.现在要你输出一组符合要求的任务安排. 思路 ...
- Python学习路程day21
本节内容: 项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以 ...