(new Function("return " + json))();

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" }
原文地址:https://www.cnblogs.com/lswit/p/4810668.html