js中的eval方法转换对象时,为何一定要加上括号?

时间:2022-10-09 16:05:54

  待转换的是一个Json字符串:

{'name':'新欢'}

  而使用如下这种方式调用则会抛出语法异常,

eval("{'name':'新欢'}");

  必须加上括号才行

eval("(" + "{'name':'新欢'}" + ")");

  原因如下:

  如果不加小括号,js会将这个字符串当作一个代码段来执行,而并非表达式(js中支持{}来分隔一段代码),而一个对象的声明,恰恰是一个表达式。

  事实上使用eval("var obj = {'name':'新欢'}")这种方式也是可行的。