Object转字符串可以包含function

**

暂时发布混淆版本,评论多开源

**

/*
* 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(){}
//	}
// }"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值