替代eval()javascript

Okk*_*kky 25 javascript jquery eval jquery-plugins

我主要使用javascript,Jquery,knockout等

吸引eval()给我的是

var a = 5;
var b = 10;
eval("a+b");
//Gives me output 15
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

问题:

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

self.Salary = ko.computed(function(){ return self.salaryEqn() && eval(self.salaryEqn()).toFixed(2); })
self.salaryEqn(salEqnTxt); 
Run Code Online (Sandbox Code Playgroud)

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

我想要解决方案

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

像一个公式

 "self.Salary = ko.computed(function(){ return self.salaryEqn() && eval(self.salaryEqn()).toFixed(2); })"
Run Code Online (Sandbox Code Playgroud)

Spu*_*ley 17

在这方面,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] );
Run Code Online (Sandbox Code Playgroud)

不需要eval().您可以根据需要构建dynamicProperty字符串,因此几乎具有无限的灵活性.

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

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

希望有所帮助.


小智 5

你的意思是你想计算一个直到你收到它才知道的方程吗?

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

简而言之:

eval 有时可以使用,但前提是方程字符串来自受信任的来源,并且您需要诸如评估动态方程之类的东西。