为什么使用JavaScript eval函数是一个坏主意?
eval函数是动态生成代码的一种强大且简单的方法,那么注意事项是什么?
不当使用eval会打开注入攻击代码
调试可能更具挑战性(没有行号等)
eval'd代码执行较慢(没有机会编译/缓存eval'd代码)
编辑:正如@Jeff Walden在评论中指出的那样,#3现在比2008年更不真实。但是,尽管可能会发生一些编译脚本的缓存,但这仅限于未经修改而重复评估的脚本。 更可能的情况是,您正在评估每次都经历轻微修改的脚本,因此无法缓存。 我们只是说,某些评估代码执行起来比较慢。
eval并不总是邪恶的。 有些时候它完全合适。
然而,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元素的狡猾的旧技巧更可靠。)
我相信这是因为它可以从字符串中执行任何JavaScript函数。 使用它可以让人们更容易地将恶意代码注入到应用程序中。
链接地址: http://www.djcxy.com/p/75085.html