这个问题已经在这里有一个答案:
- 什么是JavaScript来EVAL选择呢? 9个回答
我的工作主要是使用JavaScript,jQuery的,基因敲除等
吸引的eval()给我的东西是
var a = 5;
var b = 10;
eval("a+b");
//Gives me output 15
注:我在工作的情况下,其中的价值a
和b
的变化动态
在我的工作我负责的,从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); })"
JavaScript是在这方面非常灵活的语言。 也有极少数情况下,其中eval()
是正确的答案,任何给定的问题,那肯定是没有必要在这里。
如果你的a
和b
变量是对象的一部分,你可以用串标访问它们:
即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
但是你想字符串,所以有几乎无限的灵活性。
如果你的a
和b
变量是全局变量,全局JS在浏览器实际上是对儿童window
对象,所以你仍然可以使用全局变量,即使使用这种技术。
即你的全局变量a
也通过以下方式访问window.a
或window['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;
});
可以让您的res
变量最新每当a
或b
变化
它看起来像你正在尝试做的由用户创建的动态方程。
例如,它可以是“A + B + C”或“狗+猫”,而你不知道。
处理用户输入的公式一样,最好的办法是将文本解析成令牌,然后将令牌转换成数值/操作数。
这是一个很大的工作,但也有前推出解决方案。 例如, math.js
检查更多的选择来eval
在这个问题并在这里另外一个这两个可能被视为重复...
我明白这是一个链接只能回答,但它肯定是帮助他人寻找变质剂对eval
。