我主要使用 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()
是任何给定问题的正确答案,这里当然没有必要。
如果您的 a
和 b
变量是对象的一部分,您可以使用字符串下标访问它们:
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 。
如果你的a
和b
变量是全局变量,浏览器中的JS全局变量实际上是window
对象的子对象,所以你仍然可以即使对于全局变量也可以使用此技术。
即你的全局变量a
也可以通过window.a
或window['a']
访问,后一个选项允许您可以执行上述相同的 dynamicProperty
技巧。
希望有帮助。
关于javascript - eval() 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16037033/