2015-9-15 16:26:05
这几天看到了这段代码:
var ToJson=function(A) { try { ///运行return中的函数体(return A);返回A。 return (new Function("return " + A))(); } catch(e) { return ""; } };
一直搞不明白是什么意思。问了同事之后说是字符串转成json用的,还是不明白原理是什么。遂百度之,看到了这样一个问答:(new Function("return " + str))(); 求解 为什么阔以将一个json字符串转换为json。那位js高手知道原因,指点下,弄了一天没有弄明白为什么。
回答:new Function() 接收字符串,转换成函数。把"return" + str转换成函数的时候,str被转换成了对象(不是转换为JSON),然后使用(function(){return obj;})()方式立即执行new Function()生成的函数,函数只有一句return obj;执行结果就是str字符串转换而来的对象。
================ 2019年3月6日 =================
实际上就是利用了 Function 构造函数使用的是字符串的原理。
let b = JSON.stringify({ a: 1, b: '2' }); console.log(b); console.log('return ' + b); let toJson = new Function('a', 'return ' + b); // { "a": 1, "b": "2" } // return { "a": 1, "b": "2" }