- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一些 JavaScript 代码来解析用户输入的函数(用于类似电子表格的功能)。解析公式后,我可以将其转换为 JavaScript 并对其运行 eval()
以产生结果。
但是,如果我能避免的话,我总是避免使用 eval()
因为它是邪恶的(而且,无论对错,我一直认为它在 JavaScript 中更邪恶,因为要评估的代码可能会被用户更改)。
那么,什么时候可以使用呢?
最佳答案
我想花点时间来解决您问题的前提 - eval() 是“邪恶的”。 “evil”这个词被编程语言的人们使用,通常意味着“危险”,或者更准确地说“能够通过一个看似简单的命令造成很多伤害”。那么,什么时候可以使用危险的东西?当您知道危险是什么,并采取适当的预防措施时。
言归正传,让我们看看使用 eval() 的危险。就像其他一切一样,可能存在许多小隐患,但两大风险 - eval() 被认为是邪恶的原因 - 是性能和代码注入(inject)。
根据您的具体情况。据我了解,您是自己生成字符串,因此假设您小心翼翼地不允许生成像“rm -rf something-important”这样的字符串,则没有代码注入(inject)风险(但请记住,它是 在一般情况下很难确保这一点)。此外,如果您在浏览器中运行,那么代码注入(inject)的风险很小,我相信。
至于性能,您必须权衡编码的难易程度。我认为,如果您要解析公式,您最好在解析期间计算结果,而不是运行另一个解析器(eval() 中的解析器)。但是使用 eval() 编写代码可能更容易,而且性能损失可能不会很明显。看起来 eval() 在这种情况下并不比任何其他可能为您节省一些时间的函数更邪恶。
关于javascript - JavaScript 的 eval() 什么时候不邪恶?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21885169/
对于线程和计时器之类的东西,我无法忍受拖放控件。这些控件只是感觉与它们存在的实际本质相去甚远。拖放一个线程?我希望拖拽者在他们这样做之前了解幕后发生的事情。 这些抽象是否离金属太远了?他们是在帮助还是
有些人似乎认为 C 的 strcpy() 函数不好或邪恶。虽然我承认通常最好使用 strncpy() 来避免缓冲区溢出,但以下(strdup() 函数的实现对于那些不幸的人来说拥有它)安全地使用 st
我一直在用 matrix = *((fxMatrix*)&d3dMatrix); 好久不见。它工作正常,直到我的屏幕变黑并在我的办公 table 上收到一桶挫败感。 fxMatrix 包含 4 个 f
这是我应该问的问题,而不是这个: Emacs evil: space as a prefix key in motion state 我想定义一堆用于移动、移动、打开和关闭窗口和缓冲区的命令,这些命令
作为 Vim 用户,我在将近二十年后尝试 Emacs+Evil。我正在将我的大部分 Vim 配置移至 Evil,但我遇到很多问题的一件事是像我在 Vim 中使用的那样设置搜索和突出显示。我想要得到的是
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 9年前关闭
我是一名优秀的程序员,十分优秀!