使用 new Function() 将字符串转换为对象 - 这是如何工作的?
Turn string into an object with new Function() - how does this work?
我无法 JSON.parse 将字符串转换为对象,我发现这段代码可以解决我的问题 - 但是,我无法弄清楚它是如何工作的。如果有人可以向 JavaScript 初学者解释第 3 行发生了什么,我将不胜感激。谢谢。
var str, obj;
str = "{src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200}";
obj = new Function('return '+str)();
它创建一个函数,将您的字符串作为函数体,但 return
在它前面,然后运行该函数。结果是评估您的字符串和 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}'
您可以使用调试器window 来查看发生了什么。最后一行只是 returns 一个对象。
couldn't get JSON.parse to convert a string to an object
可以尝试用.replace()
把单引号'
换成双引号"
,在输入的":"
前属性名字加上双引号string ,然后对结果 string
调用 JSON.parse()
var str = "{src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200}";
var obj = str.replace(/'/g, "\"").replace(/(\w+)(?=:)/g, "\"\"");
console.log(JSON.parse(obj))
为了完整起见,请注意,如果您认为 JSON 的某些内容只是想 硬编码 到您的 JavaScript 源代码中,则没有根本不需要任何 JSON 解析:
var obj = {src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200};
很好。
我无法 JSON.parse 将字符串转换为对象,我发现这段代码可以解决我的问题 - 但是,我无法弄清楚它是如何工作的。如果有人可以向 JavaScript 初学者解释第 3 行发生了什么,我将不胜感激。谢谢。
var str, obj;
str = "{src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200}";
obj = new Function('return '+str)();
它创建一个函数,将您的字符串作为函数体,但 return
在它前面,然后运行该函数。结果是评估您的字符串和 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}'
您可以使用调试器window 来查看发生了什么。最后一行只是 returns 一个对象。
couldn't get JSON.parse to convert a string to an object
可以尝试用.replace()
把单引号'
换成双引号"
,在输入的":"
前属性名字加上双引号string ,然后对结果 string
JSON.parse()
var str = "{src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200}";
var obj = str.replace(/'/g, "\"").replace(/(\w+)(?=:)/g, "\"\"");
console.log(JSON.parse(obj))
为了完整起见,请注意,如果您认为 JSON 的某些内容只是想 硬编码 到您的 JavaScript 源代码中,则没有根本不需要任何 JSON 解析:
var obj = {src:'img/testimage.jpg', coord:{x:17, y:39}, width:200, height:200};
很好。