javascript评估和对象评估

Fre*_*mas 10 javascript eval

我有一个调试框架的一部分,需要能够运行时间eval对象.

具体来说,如果我有这样的字符串,"{a: 1, b:2}"则需要将其评估为具有成员ab这些值的对象.但是,如果我这样做eval("{a: 1, b:2}"),似乎将其评估为一个声明,并说出一些非法标签.

我已经黑了它,所以它评估如下:

eval("var x=" + str + "; x;");
Run Code Online (Sandbox Code Playgroud)

这似乎工作,但似乎是一个可怕的黑客.关于如何做得更好的任何建议?

(顺便说一句,我知道eval的危险,但这是实际用户不会看到的调试框架的一部分.)

Nic*_*ver 24

您可以使用()它将其解析为对象,而不是语句,如下所示:

eval("(" + str + ")");
Run Code Online (Sandbox Code Playgroud)

但是,JSON.parse()如果浏览器支持,您应首先使用它.

  • JSON.parse() 不适用于所描述的示例,因为它们不是有效的 JSON。例如,有效的 JSON 将所有属性名称括在双引号中。 (2认同)