<job>
<script>
forIn = function(obj,fun){var name,res; for(name in obj){if(res=fun(name, obj[name])){return res}}}
;(function(){
	var rYn=/\n/g, rYr=/\r/g, rDQ=/[""]/g, rArr=/Array/, rDat=/Date/, YnYt='\n\t', date_='date', num='number', boo='boolean', und='undefined', str='string', obj='object', nul='null', fun='function', DQ='"', YY='\\\\', YYn='\\n', YYr='\\r', YYdq='\\"', headF='(function(){', varObj='\nvar obj = ', footF='\n\treturn obj\n})()', arr='[]', newDate='new Date("', datEnd='")'
	var str0='\nobj[', str1='] = ', len0='', str2='{', str3='\n}', comma=',', Yn='\n', str4=' : '
	var forIn0=function(o){var s=len0; forIn(o, function(n,v){s+= str0                + me(n) + str1 + me(v)}); return s}
	var forIn1=function(o){var s=len0; forIn(o, function(n,v){s+= (s?comma:len0) + Yn + me(n) + str4 + me(v)}); return s}
	var funcインデント調整=function(fun){ var str=fun.toString(), 最終行=str.match(/([\t ]*)\}$/)[1], reg=new RegExp('\\n'+最終行,'g'); return str.replace(reg,'\n') }
	var me = obj2txt = function(o){
		if(!o && o!=0 && o!=null && typeof(o)!=date_){ return }
		switch(typeof(o)){
			case num:case boo:case und:return o
			case str:return DQ + o.replace(/\\/g,YY).replace(rYn,YYn).replace(rYr,YYr).replace(rDQ,YYdq) + DQ
			case obj:
				if(o==null){ return nul }
				if(o.constructor.toString().match(rArr)){
					return headF + (varObj + arr                  + forIn0(o)).replace(rYn,YnYt) + footF
				}else if(o.constructor.toString().match(rDat)){
					return headF + (varObj + newDate + o + datEnd + forIn0(o)).replace(rYn,YnYt) + footF
				}else{
					return str2 + forIn1(o).replace(rYn,YnYt) + str3
				}
			case fun:
				return (headF + (varObj + funcインデント調整(o) + forIn0(o)).replace(rYn,YnYt) + footF)
			case date_:
				return headF + varObj + newDate + o + datEnd + forIn0(o) + footF
		}
	}
})();

obj = {
	a:function(b,c){return c-d},
	b:new Date(),
	c:1,
	d:"aiueo'\"",
	e:[1,2,3]
}
obj.e.f = 456

str = obj2txt(obj)

eval('obj0 = '+str)

WScript.Echo(str + '\n\n' + obj2txt(obj0))
</script>
</job>