eval()的替代方法javascript

我主要使用javascript,Jquery,knockout等

吸引eval()给我的是

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

注意:我工作的情况是ab的值动态变化

在我的工作中,我正在处理来自json,knockout等的许多动态对象。所以eval解决了我的大部分问题。 但正如我读到的那样,我发现eval()有很多问题,如减速等。

我搜索了很多并且没有找到任何替代eval()的时候我必须将方程式作为对象的方程式获得。

任何人都可以建议一个插件或function替代eval()记住我上面给出的例子

问题:

我正在使用挖空映射从Json数据创建一个表。 因此,生成json格式的表格。 我还使用knockout计算了一些场。 现在我使用硬编码

 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变量是对象的一部分,则可以使用字符串下标访问它们:

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字符串,因此几乎具有无限的灵活性。

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

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

希望有所帮助。

也许使用window['var' + num]可能对你更有用。 我不太明白你的问题对不起。

你的意思是你想要计算一个你知道的方程式,直到你收到它为止?

如果是这样,请参阅在javascript中计算字符串值,而不是使用eval 。

简而言之:

有时候可以使用eval,但只有当方程式字符串来自可靠来源时,才需要评估动态方程式

如果你可以在root = {a: 1, b: 2}类的对象下收集它们,那么

 Object.observe(root, function(newValues) { res = newValues.object.a + newValues.object.b; }); 

只要ab发生变化,就可以使你的res变量保持最新状态

看起来您正在尝试执行用户创建的动态方程式。

例如,它可能是’a + b + c’或’dog + cat’,你不知道。

处理用户输入方程式的最佳方法是将文本解析为标记,然后将标记转换为值/操作数。

这是很多工作,但有预先推出的解决方案。 例如, math.js

在这个问题中检查eval更多替代方案,在这里检查另一个可能被认为是重复的…

我知道这是一个仅链接的答案,但它肯定会有助于其他人搜索eval替代品。