使用新的Function()将字符串转换为对象 - 这是如何工作的?

时间:2015-10-26 19:42:09

标签: javascript function-object

我无法让JSON.parse将字符串转换为对象,我找到了解决我问题的代码 - 但是,我无法弄清楚它是如何工作的。如果有人可以向(初学者)解释第3行发生了什么,我将不胜感激。谢谢。

var str, obj;
str = "{src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200}";
obj = new Function('return '+str)();

4 个答案:

答案 0 :(得分:3)

它创建一个函数,将您的字符串作为函数的主体,但在它前面return然后运行该函数。结果是评估您的字符串并返回它创建的对象。

它与执行此操作基本相同,但您以编程方式创建函数:

function f() {
   return {src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200};
}

obj = f();

仅供参考,JSON.parse()不起作用,因为您的字符串是有效的Javascript,但是无效的JSON。要使其成为有效的JSON,还必须引用所有属性名称。

这将是有效的JSON:

var str = '{"src":"img/testimage.jpg", "coord":{"x":17, "y":39}, "width":200, "height":200}'

答案 1 :(得分:0)

您可以使用调试器窗口查看正在进行的操作。最后一行只返回一个对象。

enter image description here

答案 2 :(得分:0)

  

无法获取JSON.parse将字符串转换为对象

可以尝试使用.replace()将单引号'替换为双引号",在输入字符串":"之前为属性名称添加双引号,然后调用{{ 1}}在结果字符串上

JSON.parse()

答案 3 :(得分:0)

为了完整性,请注意,如果您认为JSON只是想要硬编码到您的JavaScript源代码中,那么就不需要任何JSON解析在所有:

var obj = {src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200};

很好。