2015-10-05 67 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]]; ? –