为什么许多人觉得使用JavaScript的eval函数是一个坏主意?

  • 回答 (3)
  • 关注 (0)
  • 查看 (147)

eval函数是动态生成代码的一个强大而简单的方法,那么注意什么呢?

奥特曼奥特曼奥特曼奥特曼提问于
akjok54stay hungry stay foolish回答于

我相信这是因为它可以从字符串中执行任何JavaScript函数。使用它可以让人们更容易地将恶意代码注入到应用程序中。

最爱开车啦互联网的敏感者回答于

val并不总是不好的。有时候这是完全合适的。

但是,eval目前和历史上被不知道自己在做什么的人大量使用。这包括编写JavaScript教程的人,不幸的是,在某些情况下,这确实会带来安全后果 - 或者更常见的是简单的错误。所以,我们可以做的越多,越好的问题。任何时候你使用eval,你都需要理智地检查你正在做什么,因为你有可能做的更好,更安全,更清洁。

为了给出一个非常典型的例子,设置一个存储在变量“potato”中的id的元素的颜色:

eval('document.' + potato + '.style.color = "red"');

如果上述代码的作者对JavaScript对象的工作原理有了一些线索,他们会意识到可以使用方括号来代替文字点名,从而避免了对eval的需求:

document[potato].style.color = 'red';

...这是更容易阅读,以及更少的潜在错误。

(但是,那些真正知道自己在做什么的人会说:

document.getElementById(potato).style.color = 'red';

这比直接从文档对象中访问DOM元素的老式技巧更可靠。)

心愿回答于
  1. eval的不当使用会打开注入攻击的代码
  2. 调试可能更具挑战性(没有行号等)
  3. eval'd代码执行较慢(没有机会编译/缓存eval'd代码)

PS:正如@Jeff Walden在评论中指出的那样,#3现在不如2008年那么真实。然而,尽管可能发生一些编译脚本的缓存,但是这只会被限制在没有修改的情况下重复评估的脚本。更可能的情况是,您正在评估每次经历轻微修改的脚本,因此无法缓存。让我们只是说,一些eval'd代码执行更慢。

扫码关注云+社区

领取腾讯云代金券