Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数-将字符串参数转换为运算符_Javascript_Function_Arguments_Operators - Fatal编程技术网

Javascript函数-将字符串参数转换为运算符

Javascript函数-将字符串参数转换为运算符,javascript,function,arguments,operators,Javascript,Function,Arguments,Operators,抱歉,如果我的问题不清楚,我不知道该怎么说 我正在尝试创建一个函数,它接受两个数字和一个包含运算符的字符串,例如“+”、“-”、“*”、“/” 我在字符串上使用了.valueOf来提取运算符,但是num1和num2参数的计算结果似乎与传递的数字参数不符。为什么会这样 function calculate(num1, operator, num2) { return `num1 ${operator.valueOf()} num2`; } undefined calculate(2, '+

抱歉,如果我的问题不清楚,我不知道该怎么说

我正在尝试创建一个函数,它接受两个数字和一个包含运算符的字符串,例如“+”、“-”、“*”、“/”

我在字符串上使用了.valueOf来提取运算符,但是num1和num2参数的计算结果似乎与传递的数字参数不符。为什么会这样

function calculate(num1, operator, num2) {
  return `num1 ${operator.valueOf()} num2`;
}
undefined


calculate(2, '+', 1);
"num1 + num2"         //result

如果我了解您的要求,您可以使用eval来实现这一点:

function calculate(num1, operator, num2) {
  return eval(`${num1} ${operator} ${num2}`);
}

console.log(calculate(2, '+', 1)); // 3
或者,您可以通过使用开关块来避免使用eval,该开关块:


如果我了解您的要求,您可以使用eval来实现这一点:

function calculate(num1, operator, num2) {
  return eval(`${num1} ${operator} ${num2}`);
}

console.log(calculate(2, '+', 1)); // 3
或者,您可以通过使用开关块来避免使用eval,该开关块:


实现所需功能的最佳方法是使用将运算符名称映射到函数的对象

常数opmap={ +:x,y=>x+y, -:x,y=>x-y, *:x,y=>x*y, /:x,y=>x/y, }; 函数1,运算符,num2{ opmap中的if运算符{ 返回opmap[operator]num1,num2; } }
console.logcalculate2,“+”,1 实现所需功能的最佳方法是使用将运算符名称映射到函数的对象

常数opmap={ +:x,y=>x+y, -:x,y=>x-y, *:x,y=>x*y, /:x,y=>x/y, }; 函数1,运算符,num2{ opmap中的if运算符{ 返回opmap[operator]num1,num2; } }
console.logcalculate2,“+”,1;如果不使用eval或new函数,则无法执行您试图执行的操作,除非您直接检查运算符参数并根据需要以编程方式对其执行操作。@Pointy…但eval不是一个邪恶的东西。。。。。我相信一个开关可以完成这项工作。@gaetanoM和该开关也将是该注释第二部分所指的。如果不使用eval或new函数,您就无法完成您要做的事情,除非您直接检查运算符参数并以适当的编程方式对其进行操作。@Pointy…但eval并不是一个恶魔。。。。。我相信一个开关可以完成这项工作。@gaetanoM和该开关将是该评论第二部分所指的东西。