理解eval()计算布尔值的用法

understanding usage of eval() to evaluate boolean

本文关键字:布尔值 用法 计算 eval 理解      更新时间:2023-09-26

我刚才在看timer.js HERE的代码。遇到了以下代码行:

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

谁能解释一下那句话的细目?

谢谢。

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