我尝试这个简单的JavaScript代码:的eval()=意外标记:错误
eval('{"Topics":["toto","tata","titi"]}')
在Chrome控制台,例如,这将返回
SyntaxError: Unexpected token :
我试图JSON上JSONLint和它的有效。
你看到错误了吗?
我尝试这个简单的JavaScript代码:的eval()=意外标记:错误
eval('{"Topics":["toto","tata","titi"]}')
在Chrome控制台,例如,这将返回
SyntaxError: Unexpected token :
我试图JSON上JSONLint和它的有效。
你看到错误了吗?
FWIW,使用JSON.parse
代替。比eval
更安全。
第一:不要使用eval。
第二。只有使用eval才能做出评估。例如:
eval('var topics = {"Topics":["toto","tata","titi"]}');
因为这是评估一个对象。 eval()要求您传递语法上有效的javascript,并且您所做的只是传入一个裸露的对象。呼叫应该更像:
eval('var x = {"Topics":etc...}');
因为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.
快乐编码。
用途:
function evalJson(jsArray){ eval("function x(){ return "+ jsArray +"; }"); return x(); }
var yourJson =evalJson('{"Topics":["toto","tata","titi"]}');
console.log(yourJson.Topics[1]); // print 'tata''
适用于我..不知道这是否是最佳做法,但它让我开始运行 – Patrick
投票简单 – bresleveloper
你必须这样
eval('('+stingJson+')');
写入一个字符串转换为对象
希望我的帮助!
这是唯一的解决方案,在我的情况下工作。谢谢! –
thx,这比接受的答案要好得多。指出eval是邪恶的:)是很好的,但是,这仍然回答了这个问题。 – apocalypz
优秀!答对了! –
如果您正在使用JQuery的使用功能$.parseJSON()
,工作对我来说,有同样的问题
我可以问你为什么的eval(“函数(){}”)抛出一个异常呢? – BiAiB
@BiAiB出于与上述相同的原因:)'eval'的内容在*语句*上下文中运行,因此它被视为FunctionDeclaration语法结构。由此产生的错误是“SyntaxError:函数语句需要一个名称”。或者给它一个名字('eval('function f(){}'); f()')或者强制它成为一个FunctionExpression结构体('f = eval('(function(){alert(“hi”))} )'); f()')。见http://es5.github.com/x13.html – 2013-01-09 20:53:51
谢谢!对我来说棘手的部分是因为像'3'这样的字符串被正确评估,而不是'function(){}'。第二个不能被评估为ExpressionStatement:'一个ExpressionStatement不能以function关键字开始,因为这可能会使它与FunctionDeclaration模糊不清(http://es5.github.com/x12.html#x12.4) – BiAiB