我已经知道(困难的方式)需要在JSON数据周围添加括号,如下所示:
stuff = eval('(' + data_from_the_wire + ')'); // where data_from_the_wire was, for example {"text": "hello"}
(至少在Firefox 3中)。
这是什么原因呢?我讨厌写代码而又不了解幕后花絮。
放在括号内data_from_the_wire实际上等效于
data_from_the_wire
stuff = eval('return ' + data_from_the_wire + ';');
如果要在没有括号的情况下进行评估,则将对代码进行评估,并且如果其中确实有任何命名函数,则将对其进行定义,但不会返回。
举例来说,可以像创建函数一样调用函数:
(function() { alert('whoot'); })()
将调用刚刚定义的函数。但是,以下内容不起作用:
function() { alert('whoot'); }()
因此,我们看到括号有效地将代码转换为返回的表达式,而不仅仅是运行代码。