想要避免使用eval和函数构造器

4

尝试在不使用Function构造函数的情况下替换eval。遇到了困难。我并不是新手,但也不是专家。

jslint认为这是邪恶的;当我用Function构造函数替换它时,它说那只是eval()的一种形式!

   evaluateEventScript: function(requestObject) {
        var resultData;
        resultData = eval(requestObject.script);
        //send resultData elsewhere...
   }

需要帮助吗?


3
你想解决什么问题?请说明你的问题是什么。 - Jonas Elfström
requestObject.script中是什么?我猜测它是要执行的JavaScript代码块,但它是一个函数、一个AJAX请求的结果等等? - Russ Cam
此时此刻,我不确定requestObject.script内部的JS代码细节。很可能它是一些JSON,因为这在这段代码中很常见(我刚刚继承了它)。 - Dave
1个回答

3
在您的情况下,您是否可以简单地传递一个函数对象呢? 例如:
var c = function(){
   ...
}


var evaluateEventScript = function(requestObject) {
    var resultData;
    resultData = requestObject();
    //send resultData elsewhere...
}

evaluateEventScript(c);

或者是以下这种形式?这种方法可以在不使用eval或Function构造函数的情况下运行。但是需要确保requestObject是一个函数对象而不是一个字符串。


那么,如果您需要使用 eval,那就是您的首选了...好吧,有时候忽略 jslint 的建议,使用 eval 也是可以的?许多网站甚至说“几乎总有一种避免使用 eval 的方法,而且你应该这样做”,但他们并没有解释如何做到。也许现在是投资于一本好的 JavaScript 书籍的时候了,而不是通过谷歌寻找答案。不过这个论坛真的很酷——我也在寻找我能回答的问题,以回馈社区。 - Dave
我会检查一下是否可以像你建议的那样在这里使用闭包。如果我只想用我提供的上下文替换eval,我仍然对推荐的技术感兴趣。提前致谢。 - Dave
@Dave,修正一下,eval 永远是邪恶的。你说得对,我已经编辑了答案。 - Eran Medan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接