Javascript前端 - 将字符串作为表达式求值 - 使用eval()的替代方法

时间:2016-04-05 09:46:20

标签: javascript eval frontend

我想在Javascript中将字符串计算为表达式。我正在从一个动态的JSON中读取字符串。所以,表达可以是任何东西。这是使用

的伪代码
var formula = {
    "expression":"value * 9/5 + 32" //Dynamic JSON
}

var value = 26; // Dynamic value

var result = evaluateExpression(value, formula);

function evaluateExpression(value, formula) {
    return eval(formula.expression);
}

这就是我使用eval()的方式。还有其他替代方案吗?我也考虑使用Math.js,我认为这对我的要求来说太过分了。

2 个答案:

答案 0 :(得分:0)

eval的替代方法是在javascript中创建解析器和赋值器。这是相当微不足道的,但有点乏味。除非您要评估一个用户在其他用户的浏览器中提供的字符串,否则eval大部分都可以。如果是这种情况,您将不得不编写一个解析器(或使用像PEG.js这样的工具生成它)。

答案 1 :(得分:0)

你可以使用Function构造函数

来实现相同的功能

var formula = {
    "expression":"value * 9/5 + 32" //Dynamic JSON
}

var value = 26; // Dynamic value

var result = evaluateExpression(value, formula);
alert(result);

function evaluateExpression(value, formula) {
    return (new Function( 'value', 'return (' + formula.expression + ')' )(value));
    //return eval(formula.expression);
}