任何 eval() 的替代方案



我正在尝试为我的对话流应用程序创建一个计算函数。我读过关于使用 eval(( 的信息,它可能有害。我的函数有替代方法吗?

例:

var number = 4
var number1 = 9
var opreator = '+'
console.log(eval(number +opreator+ number1));

我的代码:

function Calculation(agent){
  var number = request.body.queryResult.outputContexts[0].parameters.number;
  var number1 = request.body.queryResult.outputContexts[0].parameters.number1;
  var opreator = request.body.queryResult.outputContexts[0].parameters.calculation;
  var result = (eval(number+opreator+number1));
  agent.add(result);
}

根据您的约束,您可以考虑将运算符映射到操作的对象。

var operations = {
  '+': (a,b) => a+b,
  '-': (a,b) => a-b,
  '*': (a,b) => a*b,
  '/': (a,b) => a/b
}
var number1 = 4;
var number2 = 9;
var operator = '+';
var operation = operations[operator];
console.log( operation(number1,number2) );

你也可以使用这个mathjs包。您可以像尝试使用上述eval()一样使用math.eval()

var number = 4
var number1 = 9
var operator = '+'
console.log(math.eval(number + operator + number1)); // 13
console.log(typeof math.eval(number + operator + number1)); // "number"

缺点是您必须下载整个软件包,缩小和压缩后为 136 kB。请注意,它们也有一个用于相同用途的公共 API,但这有其自身的优缺点。

最新更新