方法源码放在最后,懒得看文的直接去最后复制。
说点废话,刚从lua开发换到js,对于很多的自带方法还不适应,就比如lua非常实用的dump方法,js中居然没有相关的方法,唉,忍了好几天,实在不方便。
比如我代码里有用到一个变量,变量的数据不知道,不过本文为了方便测试,写了个测试数据,内容如下:
var testData = {
lannan91:{
Name:"lannan91",
Age:91,
Id:123456789,
Tel:110120119,
},
nannal:{
Name:"nannal",
Age:19,
Id:987654321,
Tel:911021011,
},
"Guo'degang":{
Name:"Guo'degang",
Birth:19730118,
Apprentice:{
"Yue'yunpeng":{
Name:"Yue'yunpeng",
Birth:19850415,
Apprentice:{
Name:"Shang'xiaoju",
Birth:19950829,
Home:"henan",
},
Height:175,
Home:"henan",
},
"Tao'yang":{
Name:"Tao'yang",
Birth:19970927,
Home:"jiangxi",
}
},
Height:168,
Home:"tianjin",
}
}
在不知道数据内容,只能看到一个变量的时候,如果想看的话,只有两种方法,一是打断点,但是webstorm的断点功能真是的垃圾。另一种方式就是用这行代码输出json字符串:
console.log("~~~~~~~~~ data = " + JSON.stringify(data))
可是打印出的结果是这个样子的:
我不相信一个正常人可以直接看出这是个什么玩意儿,还得复制之后再去用一个json格式化工具才能看结构,麻烦死了。每当这一通繁琐的操作下来之后,我都会忍不住怀念lua,直接dump(data, "~~~~~~~~~ data")不就行了,气不过,强大的效率机器怎么能容忍被这种操作拖住,自己写一个dump输出方法吧。
头一次需要自己写这种玩意儿,被缩进量和括号的前后对应给搞的头都大了,不过这么点小困难是绝不会让我退缩的,最后用自己写的方法输出结果如下图,终于达到满意:
基本完美还原lua用的dump方法,源码如下:
var dump = function(dumpData, dumpKey) {
var logData = dumpKey + " = ";
var loopIdx = 1;
var getResultStr = function(data){
logData = logData + "{\n";
var curIdx = 0;
for (key in data) {
curIdx++;
for (var i = 0; i < loopIdx; ++i)
logData = logData + "\t";
if (typeof key == "number") {
logData = logData + "[" + key + "] = ";
} else {
logData = logData + key + " = ";
}
if (typeof data[key] == "object") {
loopIdx++;
getResultStr(data[key]);
} else {
logData = logData + data[key];
}
logData = logData + "\n"
if (curIdx == Object.keys(data).length)
loopIdx--;
}
for (var i = 0; i < loopIdx; ++i)
logData = logData + "\t";
logData = logData + "},"
}
if (typeof(dumpData) == "object"){
getResultStr(dumpData);
} else {
logData = logData + dumpData;
}
console.log(logData);
}
dump(testData, "~~~~~~~~~ data")