替代对eval()的javascript [重复](Alternative to eval(

2019-08-31 07:32发布

这个问题已经在这里有一个答案:

  • 什么是JavaScript来EVAL选择呢? 9个回答

我的工作主要是使用JavaScript,jQuery的,基因敲除等

吸引的eval()给我的东西是

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

注:我在工作的情况下,其中的价值ab的变化动态

在我的工作我负责的,从JSON,淘汰赛等,所以EVAL解决了大多数我的问题很多动态对象。 但只要我阅读,我发现有与eval()函数这么多的问题,如放缓等

我搜索了很多,还没有发现的eval()时,我必须评估公式得到的字符串转换成方程式为对象的任何替代品。

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

问题:

我创建使用淘汰赛映射JSON数据表格。 这样什么都JSON的格式生成表格。 我还利用基因敲除计算计算某些领域。 现在,我使用硬编码

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

我想执行这些方程动态。 我可以dynamicaly创建为字符串,但对eval他们是我所面临的问题。

我想要解决方案

有没有一种方法来计算,而不使用eval存储在JavaScript字符串中的公式?

像公式

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

Answer 1:

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上述伎俩。

希望帮助。



Answer 2:

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



Answer 3:

你的意思是你要计算的公式,你可以不知道,直到你收到了吗?

如果是这样看的JavaScript计算字符串值,而不是使用eval 。

简而言之:

EVAL可有时使用,但前提是方程串来自受信任的来源,并且有你需要的东西像评估动力学方程



Answer 4:

如果能像一个对象下收集它们root = {a: 1, b: 2}然后

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

可以让您的res变量最新每当ab变化



Answer 5:

它看起来像你正在尝试做的由用户创建的动态方程。

例如,它可以是“A + B + C”或“狗+猫”,而你不知道。

处理用户输入的公式一样,最好的办法是将文本解析成令牌,然后将令牌转换成数值/操作数。

这是一个很大的工作,但也有前推出解决方案。 例如, math.js



Answer 6:

检查更多的选择来eval在这个问题并在这里另外一个这两个可能被视为重复...

我明白这是一个链接只能回答,但它肯定是帮助他人寻找变质剂对eval



文章来源: Alternative to eval() javascript [duplicate]