0

可能重复:
什么时候 JavaScript 的 eval() 不是邪恶的?

我在想,

除了Eval 再次激活解释器,造成开销,

唯一可能不好的情况(除了我刚刚写的)是向服务器JS发送数据(即eval'd)时。

我没有看到任何其他场景,如果用户想玩 js,他只会在他的浏览器边界内玩(除非 JS 正在与服务器交互)。

我对吗?

我很乐意更正。

4

1 回答 1

3

严格来说,使用 .com 在物理上实际上并没有什么危害eval,因为它所做的只是浏览器控制台已经可以做的事情。

存在注入的潜在危险,但这与将任何用户提供的输入放入<script>标签中的风险相同,而不是eval.

避免的主要原因eval是因为它必须解释一个字符串。现在,公平地说,仅仅运行一个 JavaScript 文件基本上与在整个文件上调用一个很大eval的文件(广义地说)是一样的,因为 JavaScript 是被解释的(或最多在运行时编译)。因此,eval只在用户单击按钮时才运行它的稀疏使用是可以的。eval仅当您最终频繁运行(例如循环运行)时,才会出现明显的效果。这就是为什么人们总是会告诉你传递一个函数setTimeout而不是一个字符串,例如。

也就是说,总是有替代使用eval. 它可能需要重写旧代码的一部分,但它总是可以避免的。

于 2012-07-20T20:46:10.570 回答