JavaScript 的 eval() 是邪恶的吗?
eval()是一个内置的 JS函数,它评估作为表达式的参数并执行作为参数提供给它的一个或多个语句。
原因 eval() 认为是邪恶的:使用eval()存在几个问题,并且在所有性能和代码注入中被认为是最成问题的。性能 - 由于脚本编译器无法预编译eval() ,因此即使在运行时编译代码,它也会运行编译器。即使不多,但这仍然会降低性能。
它很复杂——大多数使用eval()的情况甚至不需要那么糟糕。因此,在这种情况下,替代方法比eval()更受欢迎。代码注入 - eval()将字符串作为代码运行,黑客更容易通过使用eval()来获取特权信息。当程序从用户那里获取输入并在客户端运行时,这是一个很大的安全威胁。这反过来可以继续操纵原始程序本身。
更难调试 - 调试时需要双重工作。
例子:
HTML
输出:
7
When eval() not evil:适用于您在浏览器上运行程序的情况。此外,您需要非常小心,不要传递任何可能导致代码注入和以任何可能方式操纵程序的信息。如果有任何函数可以给出与 eval() 相同的结果,则通常首选使用替代函数代替eval() 。闭包、面向对象技术、函数式技术通常能够替代 eval()。对于无法做到这一点并且使用eval()是唯一可能的方法,它比不会以任何方式操纵DOM的密码更可取。如果使用由 a 提交的输入在服务器上运行,eval() 是邪恶的不是由开发人员创建或未经开发人员清理的客户端。 eval() 如果在客户端上运行,即使使用客户端制作的未经处理的输入,它也不是坏事。显然,您应该始终清理输入,以便对您的代码消耗的内容进行一些控制。