我有一个调试框架的一部分,需要能够运行时间eval对象。
具体来说,如果我有一个类似于此"{a: 1, b:2}"
的字符串,则需要将其评估为具有成员a
和b
的对象。但是,如果我eval("{a: 1, b:2}")
,它似乎将其评估为一个声明,并说明了一个非法标签。
我已经黑了它,所以它评估如下:
eval("var x=" + str + "; x;");
这似乎有效,但似乎是一个可怕的黑客。关于如何做得更好的任何建议?
(顺便说一下,我知道eval的危险,但这是实际用户不会看到的调试框架的一部分。)
答案 0 :(得分:22)
您可以使用()
将其解析为对象,而不是语句,如下所示:
eval("(" + str + ")");
但是,如果浏览器支持,则应首先使用JSON.parse()
。