Javascript Eval是邪恶的但只在某些情况下?

时间:2012-07-20 20:34:40

标签: javascript eval

  

可能重复:
  When is JavaScript's eval() not evil?

我在想,

除了Eval之外

再次激活解释器,导致开销,

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

我没有看到任何其他情况,如果用户想要使用js,他将仅在他的浏览器界限中播放(除非JS与服务器进行交互)。

我是对的吗?

我很乐意纠正。

1 个答案:

答案 0 :(得分:3)

严格地说,使用eval实际上并没有任何障碍,因为它只能做浏览器控制台已经可以做的事情。

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

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

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