一尘不染

为什么JavaScript的eval需要括号来评估JSON数据?

javascript

我已经知道(困难的方式)需要在JSON数据周围添加括号,如下所示:

stuff = eval('(' + data_from_the_wire + ')');
// where data_from_the_wire was, for example {"text": "hello"}

(至少在Firefox 3中)。

这是什么原因呢?我讨厌写代码而又不了解幕后花絮。


阅读 249

收藏
2020-05-01

共1个答案

一尘不染

放在括号内data_from_the_wire实际上等效于

stuff = eval('return ' + data_from_the_wire + ';');

如果要在没有括号的情况下进行评估,则将对代码进行评估,并且如果其中确实有任何命名函数,则将对其进行定义,但不会返回。

举例来说,可以像创建函数一样调用函数:

(function() { alert('whoot'); })()

将调用刚刚定义的函数。但是,以下内容不起作用:

function() { alert('whoot'); }()

因此,我们看到括号有效地将代码转换为返回的表达式,而不仅仅是运行代码。

2020-05-01