(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值