了解eval()的用法来评估布尔值

时间:2015-10-05 11:36:55

标签: javascript

我刚刚浏览了timer.js HERE 的代码。并遇到以下几行代码:

var paramList = ['autostart', 'time'];
for (var arg in paramList) {
    if (func[paramList[arg]] != undefined) {
        eval(paramList[arg] + " = func[paramList[arg]]");
    }
};

在源代码中它的所有内容都在一行上,但我上面的内容更具可读性,我的难点在于使用eval,I.E。以下代码行:

eval(paramList[arg] + " = func[paramList[arg]]");

现在,如果我在chrome中添加一个断点到上面一行并转到控制台并粘贴代码行,我会得到以下内容:

true 

为什么?让我们再看一下这句话:

eval(paramList[arg] + " = func[paramList[arg]]");

+在这做什么?将paramList[arg]转换为字符串,在这种情况下使用eval如下:

eval("paramList[arg] = func[paramList[arg]]");

或加号是否用于连接目的? (我认为这不太可能!)

我已阅读 MDN eval() ,但仍有疑问。

有人可以解释一下这个陈述的细分吗?

谢谢。

1 个答案:

答案 0 :(得分:4)

eval需要一个字符串。你有什么:

eval(paramList[arg] + " = func[paramList[arg]]");

+只是字符串连接。

相当于:

var code = paramList[arg] + " = func[paramList[arg]]"
eval(code);

所以我说它应该等同于:

global[paramList[arg]] = func[paramList[arg]];

或者,在此特定示例中(使用var paramList = ['autostart', 'time'];)):

if (func['autostart'] != undefined)
    autostart = func['autostart'];

if (func['time'] != undefined)
    time = func['autostart'];