2015-10-05 58 views
0

我刚刚通过timer.js的代码HERE。和整个下面的代码行来了:了解eval()的用法来评估布尔型

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

在源代码中所有在同一行,但我做了它上面的可读性,我的困难是与eval使用,即下面的代码行:

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(),但仍有疑虑。

有人能解释一下这个声明的细节吗?

谢谢。

+0

+只是字符串连接 – caub

回答

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']; 
+0

我真的只想知道'eval(par amList [arg] +“= func [paramList [arg]]”);'等于'eval(“paramList [arg] = func [paramList [arg]]”);',我的控制台给出了相同的结果,但我仍然不得不问! ,这就是我真正想知道的,谢谢你的努力! –

+0

@AlexanderSolonik我不知道你的控制台如何给你两个相同的结果。再次阅读我的答案。 –

+0

什么是全局[paramList [arg]] = func [paramList [arg]]; ? –