eval()是否可以替代?

时间:2019-03-29 02:15:51

标签: javascript dialogflow

我正在尝试为Dialogflow应用创建一个计算函数。 我读到有关使用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);

}

2 个答案:

答案 0 :(得分:3)

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

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) );

答案 1 :(得分:0)

您也可以使用此mathjs软件包。您可以像尝试使用以上math.eval()一样使用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,但这有其优点和缺点。