Javascript Eval()=意外标记:错误

Javascript Eval()=意外标记:错误,javascript,json,eval,Javascript,Json,Eval,我尝试了以下简单的JavaScript代码: eval('{"Topics":["toto","tata","titi"]}') 例如,在Chrome控制台中,返回 SyntaxError:意外标记: 我尝试了JSON,它是有效的 你看到错误了吗?第一:不要使用eval 二号。仅使用eval来制作某些东西,我们将对其进行评估。例如: eval('var topics = {"Topics":["toto","tata","titi"]}'); FWIW,改用。比评估更安全,因为这是在评估对象

我尝试了以下简单的JavaScript代码:

eval('{"Topics":["toto","tata","titi"]}')
例如,在Chrome控制台中,返回

SyntaxError:意外标记:

我尝试了JSON,它是有效的


你看到错误了吗?

第一:不要使用eval

二号。仅使用eval来制作某些东西,我们将对其进行评估。例如:

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

FWIW,改用。比评估更安全,因为这是在评估对象。eval()要求您传入语法有效的javascript,您所做的只是传入一个裸对象。该调用应该更像:

eval('var x = {"Topics":etc...}');
由于
eval
不强制表达式上下文,并且提供的字符串是无效的JavaScript程序,因此前三个标记(以及它们的外观)是:

{/使用:


你必须这样写

eval('('+stringJson+')' );
将字符串转换为对象的步骤


希望我能提供帮助!

如果您使用JQuery,请使用函数
$。为我工作的parseJSON()
,如果您想使用下面的代码生成数组,也会遇到同样的问题

var jsonObject = eval('(' +"["+ response + "]"+')');

我可以问你为什么eval('function(){}')也会抛出异常吗?@BiAiB的原因与上面相同:)eval的内容在语句上下文中运行,因此它被视为FunctionDeclaration语法构造。由此产生的错误是“SyntaxError:function语句需要一个名称”。给它一个名称(
eval('function f(){}');f()
)或将其强制到FunctionExpression构造中('code>f=eval('(function(){alert(“hi”)));f()
)。请参见,谢谢!对我来说,棘手的部分是因为像'3'这样的字符串计算正确,而不是'function(){}“。第二个不能作为表达式语句进行计算:
表达式语句不能以function关键字开头,因为这可能会使其与FunctionDeclaration不明确(
)对我有用。不知道这是否是最佳实践,但它让我振作起来并运行这是对我来说唯一有效的解决方案。谢谢!thx,这比公认的答案要好得多。指出eval是邪恶的是好的:),但这仍然回答了这个问题。我在计算普通javascript函数时遇到了同样的问题,这解决了我的问题。为什么/如何将表达式封装在括号中解决这个问题?
eval('('+stringJson+')' );
var jsonObject = eval('(' +"["+ response + "]"+')');