用JavaScript写一个类似PHP print_r的函数

PHP print_r的函数很好用,网上娱乐城可以用来打印数组、对象等的结构与数据,可惜JavaScript并没有原生提供类似的函数。不过我们可以试着自己来实现这个函数,下面提供一些方法与思路。

方法一

function print_r(theObj) {
    var retStr = ‘‘;
    if (typeof theObj == ‘object‘) {
        retStr += ‘<div style="font-family:Tahoma; font-size:7pt;">‘;
        for (var p in theObj) {
            if (typeof theObj[p] == ‘object‘) {
                retStr += ‘<div><b>[‘+p+‘] => ‘ + typeof(theObj) + ‘</b></div>‘;
                retStr += ‘<div style="padding-left:25px;">‘ + print_r(theObj[p]) + ‘</div>‘;
            } else {
                retStr += ‘<div>[‘+p+‘] => <b>‘ + theObj[p] + ‘</b></div>‘;
            }
        }
        retStr += ‘</div>‘;
    }
    return retStr;
}

方法二

$(document).ready(function(){
	$(‘#btn‘).click(function(){
	  var jsonStr = $(‘#jsonData‘).val();
	  var json = eval(‘(‘+jsonStr+‘)‘);
	  (function(){
		var print_r = function(o, depth) {
		  var result = ‘‘;
		  depth || (depth=1);
		  var indent = new Array(4*depth+1).join(‘ ‘);
		  var indentNext = new Array(4*(depth+1)+1).join(‘ ‘);
		  var indentNextTwo = new Array(4*(depth+2)+1).join(‘ ‘);
		  var tmp = ‘‘;
		  var type = typeof o;
		  switch(type) {
			case ‘string‘:
			case ‘number‘:
			case ‘boolean‘:
			case ‘undefined‘:
			case ‘function‘:
			  tmp += indent + indentNext + o + "\n";
			  break;
			case ‘object‘:
			default:
			  for(var key in o) {
				tmp += indentNextTwo + ‘[‘ + key + ‘] = ‘;
				tmp += print_r(o[key], (depth+1));
			  }
		  }
		  result += type + "\n";
		  result += indentNext + ‘(‘ + "\n";
		  result += tmp;
		  result += indentNext + ‘)‘ + "\n";
		  return result;
		};
		alert(print_r(json));
	  }(json));
	});
});

方法三

print_r:function(theObj) {
	var retStr = ‘‘;
	if (typeof theObj == ‘object‘||typeof theObj == ‘array‘) {
		retStr += ‘<div style="font-family:Tahoma; font-size:7pt;">‘;
		for (var p in theObj) {
			if (typeof theObj[p] == ‘object‘ || typeof theObj[p] == ‘array‘) {
				retStr += ‘<div><b>[‘+p+‘] => ‘ + typeof(theObj) + ‘</b></div>‘;
				retStr += ‘<div style="padding-left:25px;">‘ + XFUPLOAD.Tools.print_r(theObj[p]) + ‘</div>‘;
			} else {
				retStr += ‘<div>[‘+p+‘] => <b>‘ + theObj[p] + ‘</b></div>‘;
			}
		}
		retStr += ‘</div>‘;
	}
	$("body").append(retStr);
}
时间: 2024-10-12 19:40:13

用JavaScript写一个类似PHP print_r的函数的相关文章

编译原理实战入门:用 JavaScript 写一个简单的四则运算编译器(四)结语

四则运算编译器,虽然说功能很简单,只能编译四则运算表达式.但是编译原理前端部分几乎都有涉及,词法分析,语法分析,还有代码生成. 再复杂的编译器.再简单的编译器,功能上是差不多的,只是复杂的编译器实现上会更困难. 这个系列的文章是为了帮助你入门,在这个基础上再去看编译原理相关书籍,不至于打瞌睡. 如果你对编译原理很有兴趣,并且想更深一步的学习,在这里强烈推荐你看一本书--我心目中的神书--<计算机系统要素-从零开始构建现代计算机>. 这本书神在哪? 神在它通俗易懂,对小白足够友好,但又不过分肤浅

通过正则写一个较为完美的getByClass函数

getByclass传入两个参数,oParent是父集,sClass是要传入class名称 1 function getByClass(oParent,sClass){ 2 var aChild = oParent.getElementsByTagName("*"), 3 result = []; 4 for(var i =0;i<aChild.length;i++){ 5 if(aChild[i].className.match(new RegExp("(\\s|^)

写一个php memcache 简单的函数

在一个项目中添加了memcache层,但由于数据库本来压力就不大,数据量很小,所以性能改善不是特别明显,因此学习并应用下来记录一下方便以后自己使用.这里我只应用了直接调用对应api函数的方法,另外一种方法是创建对象来连接memcache,具体是$mem=new Memcache,然后再调用对象里的方法来操作要存储的item. 本次使用环境为php 5.4.17, yum安装的驱动: php-pecl-memcache-3.0.8-1.el5.remi 代码如下: $MEMCACHE["host&

JavaScript写一个连连看的游戏

天天看到别人玩连连看, 表示没有认真玩过, 不就把两个一样的图片连接在一起么, 我自己写一个都可以呢. 使用Javascript写了一个, 托管到github, 在线DEMO地址查看:打开 最终的效果图: 写连连看之前要先考虑哪些呢? 1:如何判断两个元素可以连接呢, 刚刚开始的时候我也纳闷, 可以参考这里:打开: 2:模板引擎怎么选择呢, 我用了底线库的template,因为语法简单. 本来想用Handlebars,但是这个有点大啊, 而且底线库也提供很多常用工具方法( •? ω •? )y:

用javascript写一个前端等待控件

前端等待控件有啥新奇的?什么jquery啦,第三方控件啦,好多好多,信手拈来. 因为项目使用了bootstrap的原因,不想轻易使用第三方,怕不兼容.自己写一个. 技术点包括动态加载CSS,javascript的命名空间,所以记录一下. 这个等待控件主要是:进行某个操作前,显示一个信息提示:"数据加载中,请稍候...",操作成功后,在回调函数中将提示消失. 原理是这个等待控件完全由JS动态加进去,包括CSS,页面中并无预先设定. 那么这个CSS怎么动态加载呢?等待控件中,样式使用了cl

用JavaScript写一个简单的倒计时,可以应用在发送短信验证码的“59秒后重新发送验证短信”

倒计时——从10倒数到0,点击按钮会还原倒计时 <body> <!-- 将textvalue值设为10,从10倒数 --> <input type="text" value="10" id="txt"> <input type="button" value="重新开始" id="btn"> </body> <script&

用Python写一个批量生成账号的函数(用户控制数据长度、数据条数)

# 1.写一个函数,批量生成一些注册使用的账号:产生的账号是以@163.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大写字母.小写字母.数字组成 import random,stringdef Users(num,len): result = [] a = string.ascii_lowercase b = string.ascii_uppercase c = string.digits d = string.ascii_letters count = 0

javascript 写一个ajax 自动拦截,并下载数据

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

JavaScript写一个小乌龟推箱子游戏

推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 推箱子游戏的在线DEMO : 打开 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用了zepto的touch模块, 通过手指滑动屏幕就可以控制乌龟走不同的方向: 因为推箱子这个游戏比较简单, 直接用了过程式的方式写代码, 模块也就是两个View 和 Model, 剩下就是用户的事件Controller, 用户每一次按下键盘的方向键都会改变数据模型的数据,然后重新生成游戏的静态htm