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

Tui*_*izi 17 javascript json eval

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

eval('{"Topics":["toto","tata","titi"]}')
Run Code Online (Sandbox Code Playgroud)

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

SyntaxError:意外的令牌:

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

你看到了这个bug吗?

Mar*_*rta 33

你必须这样写

eval('('+stingJson+')' );
Run Code Online (Sandbox Code Playgroud)

将字符串转换为Object

希望我帮忙!

  • 这是我的唯一解决方案.谢谢! (3认同)

小智 26

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

{            // <-- 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.
Run Code Online (Sandbox Code Playgroud)

快乐的编码.

  • @BiAiB出于与上述相同的原因:)`eval`的内容在*语句*上下文中运行,因此它被视为FunctionDeclaration语法构造.由此产生的错误是"SyntaxError:function statement需要名称".给它一个名字(`eval('function f(){}'); f()`)或强制它进入一个FunctionExpression构造(`f = eval('(function(){alert("hi")} )'); f()`).见http://es5.github.com/x13.html (4认同)

Jon*_*n M 11

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


Nea*_*eal 9

第一:不要使用eval.

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

eval('var topics = {"Topics":["toto","tata","titi"]}');
Run Code Online (Sandbox Code Playgroud)