我主要使用javascript,Jquery,knockout等
吸引eval()给我的是
var a = 5;
var b = 10;
eval("a+b");
//Gives me output 15
Run Code Online (Sandbox Code Playgroud)
注意:我工作的情况是值a和b动态变化
在我的工作中,我正在处理来自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) 我在网页 (150+) 中有一堆字段,需要在它们上运行方程式才能产生结果。
我目前存储这样的方程:
<input name="F7" type="text" class="numeric" data-formula="([C7]-[D7])/[E7]" readonly />
Run Code Online (Sandbox Code Playgroud)
当输入模糊时,我使用 jQuery 选择器遍历所有具有data-formula属性的输入,采用公式,并使用正则表达式替换指针([C7]等式中的 )替换为其适当的值。
之后,我eval()将方程得到一个结果,并将其放入正确的输入中。这很好用,但速度很慢,导致网页挂起几秒钟,如果每次输入模糊时都会发生这种情况,这很糟糕。
有没有一种方法可以在不使用的情况下评估一个方程,例如“(1-2)/4” eval()?这些方程也可能有函数,例如平方根(这eval()很好,因为我可以直接Math.sqrt()输入公式),并且数字可能是小数。
注意:这个应用程序必须在 IE7 和 8 上运行,所以我不相信我可以使用 Webworkers 或类似的东西。我还考虑过仅在点击“保存”按钮后运行此代码,但如果可能,我更希望用户界面实时更新
所以,我搜索了高低,我找不到答案.我已经尝试了大约三次,并通过基本上将输入作为字符串存储在数组中,解析数字,然后打开运算符,以便评估整数,得到一个基本的一个,但我有一个找出链接逻辑真的很难.有没有人有什么建议?甚至可能只是伪造的代码?我真的不想使用eval.非常感谢
当我尝试"eval"函数作为eval("020*05 + 05")时,它将返回85而不是105.有人可以解释为什么eval函数的行为如下吗?还建议任何克服这个问题.
我想在我的字符串公式中替换整数来评估表达式.
我有一个像这样的数组
var value_array=[
{value: "11", order: "1"},
{value: "4", order: "2"},
{value: "31", order: "3"},
{value: "41", order: "4"},
{value: "51", order: "5"},
{value: "61", order: "6"},
{value: "71", order: "7"},
{value: "80", order: "8"},
{value: "91", order: "9"},
{value: "101", order: "10"},
{value: "111", order: "11"},
{value: "128", order: "12"},
{value: "131", order: "13"},
{value: "145", order: "14"}
];
Run Code Online (Sandbox Code Playgroud)
我的公式是 ((1+14)*5+12*3-7*8/2+4)
我想用相应的订单值替换整数.
我应该得到((11+145)*51+128*31-71*80/4+41),然后我会评估由10545产生的字符串.
谢谢你的帮助