我何时应该使用eval(在运行时使用字符串并将其作为代码执行)?

Gor*_*son 2 language-agnostic eval

我经常听到这个论点(在javascript中,但许多语言都有类似eval的特性),使用eval是"糟糕的".您认为使用eval的大多数事情可以通过其他方式完成,即大多数情况下eval非常慢,并且可以允许用户输入要执行的代码(如果没有采取适当的预防措施) ).我们知道大多数功能本身并不仅仅是"糟糕",但让人们关注eval,

eval的有效用途是什么?(除了为开发人员调试应用程序提供一个很好的功能)

sep*_*p2k 7

一个读取-求值-输出循环通常会使用eval来实现.


Kev*_*lar 6

eval()有好有坏.在支持它的任何语言中,eval最糟糕的方面是它为安全漏洞敞开了大门.如果开发人员可以弄清楚如何获取任何自定义代码,并将其写入应用程序中的eval语句,那么他可能会执行各种各样的恶意操作,例如窃取私有数据或禁用应用程序提供的服务.性能是您已经表达过的另一个问题.

Eval确实在您的代码可能需要动态生成其他代码以轻松执行复杂任务的区域中闪耀.我现在想不出一个例子,但是你需要这样做的任何情况都可能不会是微不足道的.我建议只在绝对必要时才这样做,以尽量减少我在前一段中提出的观点的风险.如果可能,永远不要相信用户输入足够安全,以便使用eval.