【发布时间】:2016-02-18 12:43:03
【问题描述】:
如果我运行这个:
eval('{ear: {"<=": 6}}');
我收到一个错误:
Uncaught SyntaxError: Unexpected token :
让我们手动创建对象:
var foo = {};
foo.ear = {};
foo.ear["<="] = 6;
现在,下面的代码:
JSON.stringify(foo)
返回以下字符串:
'{"ear":{"
与我开始使用的字符串相同(除了白色字符,但它们无关紧要),因此eval(JSON.stringify(foo)) 返回相同的语法错误错误消息。然而:
$.parseJSON(JSON.stringify(foo))
正确执行。这是什么原因?
编辑:
正如 nnnnnn 和 Ron Dadon 所指出的,stringify 的初始字符串和结果是不同的。但是,正如我在问题中指出的那样,即使将 stringify 的结果用作 eval 的输入也会导致语法错误消息。
EDIT2:
根据所进行的答案和实验,这个功能很有趣:
function evalJSON(text) {
return eval("(" + text + ")");
}
【问题讨论】:
-
JSON.stringify not 返回与第一行相同的字符串。 (您的第一行不是有效的 JSON,因为第一个键名没有被引用。)您是否尝试过将第一行的结果分配给变量?
var x = eval(...) -
那是因为
eval尝试使用指令块。您没有定义对象。或者 nnnnn 都是对的。 -
不一样 - 注意 JSON.stringify 中“ear”周围的引号
-
我认为您对
eval()的作用感到困惑。它尝试创建 Javascript 块,而不是 JSON。像eval('{var ear ={"<=":6}}');这样的东西可以工作。 -
如果您能弄清楚为什么以下变体 不 给出错误,则可以加分:
eval('{ear: {nose: 6}}')(如果您需要提示,请告诉我。)
标签: javascript jquery json eval