Javascript eval()有其他选择吗?
我正在尝试为Dialogflow应用程序创建一个计算函数。 我读过关于使用eval()的文章,它可能是有害的。我的函数是否有其他方法 例如:Javascript eval()有其他选择吗?,javascript,dialogflow-es,Javascript,Dialogflow Es,我正在尝试为Dialogflow应用程序创建一个计算函数。 我读过关于使用eval()的文章,它可能是有害的。我的函数是否有其他方法 例如: var number = 4 var number1 = 9 var opreator = '+' console.log(eval(number +opreator+ number1)); 我的代码: function Calculation(agent){ var number = request.body.queryResult.outp
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操作={
“+”:(a,b)=>a+b,
“-”:(a,b)=>a-b,
“*”:(a,b)=>a*b,
“/”:(a,b)=>a/b
}
变量1=4;
变量数2=9;
var运算符='+';
var操作=操作[操作员];
控制台日志(操作(编号1、编号2))代码>您也可以使用此软件包。您可以使用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,但这有其自身的优点和缺点。操作符的潜在价值是什么?你能把每一个都映射到一个函数吗,比如var操作符={'+':函数(a,b){returna+b;}代码>与运算符[运算符](数字,数字1)
?与几乎所有的eval一样,是的,您描述的代码存在一个巨大的问题。巨大的。恶意用户可能会利用将请求查询转换为代码的优势,在毫无戒心的人点击他们的站点链接时执行任何JavaScript。我假设你有操作员列表,使用切换案例,而不是evalgoogle“谓词引擎”,准备进入兔子洞