关于javascript:Eval()=意外的令牌:错误

Eval() = Unexpected token : error

我尝试了这个简单的JavaScript代码:

1
eval('{"Topics":["toto","tata","titi"]}')

例如,在Chrome控制台中,会返回

SyntaxError: Unexpected token :

我在JSONLint上尝试了JSON,它是有效的。

你看到了这个bug吗?


你必须这样写

1
eval('('+stingJson+')' );

将字符串转换为Object

希望我帮忙!


因为eval不强制表达式上下文并且提供的字符串是无效的JavaScript程序,因此前三个标记(以及它们的查看方式)是:

1
2
3
{            // <-- beginning of a block, and NOT an Object literal
"Topics"     // <-- string value, okay (note this is NOT a label)
:            // <-- huh? expecting";" or"}" or an operator, etc.

快乐的编码。


FWIW,改为使用JSON.parse。 比eval更安全。


第一:不要使用eval。

第二。 只使用eval来制作东西,并进行评估。 例如:

1
eval('var topics = {"Topics":["toto","tata","titi"]}');

采用:

1
2
3
4
5
function evalJson(jsArray){ eval("function x(){ return"+ jsArray +"; }"); return x(); }

var yourJson =evalJson('{"Topics":["toto","tata","titi"]}');

console.log(yourJson.Topics[1]); // print 'tata''


因为那是在评估一个对象。 eval()要求你传入语法上有效的javascript,而你所做的只是传入一个裸对象。 电话应该更像是:

1
eval('var x = {"Topics":etc...}');


如果您使用的是JQuery,那么为我工作的函数$.parseJSON()会遇到同样的问题