**
暂时发布混淆版本,评论多开源
**
/*
* By: Worm(虫) v1.0.0
* @ 用于Object转String 可包含函数结构
* 使用方法: toWormString(Object) => String
*/
// 方法一
function toWormString (obj, level) {
function levelSpace (level) {
var str = ''
for (let i = 0; i < level; i++) {
str += ' ';
}
return str
}
var objs = obj.constructor()
var keylen = Object.keys(obj).length;
var index = 0
level = level || 0
level++
for (var i in obj) {
index++
if (obj[i].constructor == Array || obj[i].constructor == Object) {
objs[i] = toWormString(obj[i], level) + (keylen == index ? '\n' : ',\n')
} else if (obj[i].constructor == Function) {
var str = String(obj[i])
str = str.replace(/[\s\S]*\(([\s\S]*)\)([\s\S]*)({[\s\S]*})/g, 'function($1)$3')
objs[i] = str + (keylen == index ? '\n' : ',\n')
} else {
objs[i] = (obj[i].constructor == String ? '"' + obj[i] + '"' : obj[i]) + (keylen == index ? '\n' : ',\n')
}
}
if (objs.constructor == Array) {
var tr = '[\n'
for (var i in objs) {
tr += levelSpace(level) + objs[i]
}
tr = tr.substr(0, tr.length - 1);
tr += levelSpace(level - 1) + ']'
objs = tr
}
if (objs.constructor == Object) {
var tr = '{\n'
for (var i in objs) {
tr += levelSpace(level) + i + ':' + objs[i]
}
tr += levelSpace(level - 1) + '}'
objs = tr
}
return objs
}
// 方法二
function obj2Str (obj, key) {
switch (typeof (obj)) {
case 'object':
var ret = [];
if (obj instanceof Array) {
for (var i = 0, len = obj.length; i < len; i++) {
ret.push(obj2Str(obj[i]));
}
return '[' + ret.join(',') + ']';
}
else if (obj instanceof RegExp) {
return obj.toString();
}
else {
for (var a in obj) {
ret.push(a + ':' + obj2Str(obj[a], a));
}
return '{' + ret.join(',') + '}';
}
case 'function':
var str = String(obj)
str = str.replace(/[\s\S]*\(([\s\S]*)\)([\s\S]*)({[\s\S]*})/g, 'function($1)$3')
console.log(str)
return str;
case 'number':
return obj.toString();
case 'string':
return "\"" + obj.replace(/(\\|\")/g, "\\$1").replace(/\n|\r|\t/g, function (a) { return ("\n" == a) ? "\\n" : ("\r" == a) ? "\\r" : ("\t" == a) ? "\\t" : ""; }) + "\"";
case 'boolean':
return obj.toString();
default:
return obj.toString();
}
}
例如:
var a = {
a: '999',
b: 123,
c: {
d: function(){}
}
}
console.log(toWormString(a))
// toWormString(a) => (String)"{
// a: '999',
// b: 123,
// c: {
// d: function(){}
// }
// }"