javascript - eval() 的替代方案

标签 javascript jquery jquery-plugins eval

我主要使用 javascript、Jquery、knockout 等

吸引 eval() 的地方是

var a = 5;
var b = 10;
eval("a+b");
//Gives me output 15

注意:我工作的情况是 a 的值和b动态变化

在我的工作中,我正在处理大量来自 json、knockout 等的动态对象。因此 eval 解决了我的大部分问题。 但当我阅读时,我发现 eval() 有很多问题,比如速度变慢等。

当我必须评估以字符串形式获取的方程作为对象将方程获取时,我进行了很多搜索,但没有找到 eval() 的任何替代品。

任何人都可以建议一个替代 eval() 的插件或函数吗?请记住我上面给出的示例

问题:

我正在使用淘汰映射从 Json 数据创建一个表。这样无论json的格式是什么,表都会生成。我还使用计算淘汰赛来计算一些字段。 现在我使用硬编码

self.Salary = ko.computed(function(){ return self.salaryEqn() && eval(self.salaryEqn()).toFixed(2); })
self.salaryEqn(salEqnTxt); 

我想动态地执行这些方程。我可以将其动态创建为字符串,但评估它们是我面临的问题。

我想要解决方案

有没有一种方法可以在不使用 eval 的情况下计算 JavaScript 中存储在字符串中的公式?

就像一个公式

 "self.Salary = ko.computed(function(){ return self.salaryEqn() && eval(self.salaryEqn()).toFixed(2); })"

最佳答案

Javascript 在这方面是一种非常灵活的语言。在极少数情况下,eval() 是任何给定问题的正确答案,这里当然没有必要。

如果您的 ab 变量是对象的一部分,您可以使用字符串下标访问它们:

ie myobj.a 也可以被引用为 myobj['a']

从此,您可以使用下标变量,因此您可以动态引用 myobj 中的任何元素 - 即:

var myobj = {a : 5, b : 10};

var dynamicProperty1 = 'a';
var dynamicProperty2 = 'b';

//gives 15.
alert( myobj[dynamicProperty1] + myobj[dynamicProperty2] );

不需要eval()。您可以按照自己的意愿构建 dynamicProperty 字符串,因此几乎具有无限的灵 active 。

如果你的ab变量是全局变量,浏览器中的JS全局变量实际上是window对象的子对象,所以你仍然可以即使对于全局变量也可以使用此技术。

即你的全局变量a也可以通过window.awindow['a']访问,后一个选项允许您可以执行上述相同的 dynamicProperty 技巧。

希望有帮助。

关于javascript - eval() 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16037033/

相关文章:

javascript - Eslint 报告依赖项配置的 eslintrc 配置问题

JQuery 验证不检查所有 Bootstrap 选项卡

javascript - 从表单获取值的困难

java - 在 jquery forntier 日历中加载文件时出错

javascript - 在 Firebase 的有序列表中获取对象的索引

javascript - 使用源映射还原 JavaScript 缩小

javascript - 如何附加一个新的 div 元素,该元素是使用 d3 创建的第一个 div 的同级元素?

Javascript 安全错误

jQuery 插件创作 : explanation for "this" keyword?

jquery-ui - 当输入失去焦点时jquery关闭日期选择器