如何使这种功能起作用?如果我将其称为calculate(2, 4, '*')
,则会返回字符串'2*4'
。我也试过parseInt
没有成功,它只是首先出现在String to Number。
function calculate(x, y, operation) {
this.number = x + operation + y;
return this.number;
}
答案 0 :(得分:4)
只需使用想要的运算符创建一个对象,测试运算符是否存在,然后使用它。
var operators = {
'+': function (a, b) { return a + b; },
'-': function (a, b) { return a - b; },
'*': function (a, b) { return a * b; },
'/': function (a, b) { return a / b; }
},
calculate = function (val1, val2, sign) {
if (sign in operators) {
return operators[sign](val1, val2);
}
}
console.log(calculate(6, 7, '*'));

答案 1 :(得分:1)
这是一个基本的计算器,你已经编写了所有的代码。只是错过了评估。
注意:请注意,对于简单的计算器,可以使用eval。如果您出于安全原因不在某个关键项目等中实现此功能,但是如果它用于某些内部用途或用于分配,那么它就不那么糟糕且非常方便。
function calculator(x,y,operation){
this.number=x+operation+y;
return eval(this.number);
}
console.log(calculator(1,2,"+"));
console.log(calculator(1,2,"-"));
console.log(calculator(1,2,"*"));
console.log(calculator(1,2,"/"));

答案 2 :(得分:1)
您的operation
参数只是一个字符串,而不是一个真正的运算符。这就是为什么它不能像你想的那样工作。所以,你有一些选择。
您可以使用eval
函数以一种代码的形式运行String,这样:
function calculate(x, y, operation) {
return eval(x + operation + y)
}
虽然它看起来如此简洁明了,但请记住,对于安全性, manutenibility 和,这通常是不良做法性能原因(more about it here)。
有时最简单的想法是最好的选择:只使用一些条件。
function calculate(x, y, operation) {
if (operation === '+') return x + y
else if (operation === '-') return x - y
else if (operation === '*') return x * y
else if (operation === '/') return x / y
else if (operation === '%') return x % y
else if (operation === '**') return x ** y
else return NaN
}
它可能看起来有点重复,但请记住,您没有很多算术运算要处理。事实上,上面处理了all the binary arithmetic operators。
另一种语法是switch case
语句,但它只是一个更详细的条件结构,ideia保持不变。
另一种强烈受Nina Scholz' answer启发的方法是在Object的帮助下将运算符的String表示与它们等效的函数映射:
function calculate(x, y, operation) {
var operators = {
'+': function (a, b) { return a + b },
'-': function (a, b) { return a - b },
'*': function (a, b) { return a * b },
'/': function (a, b) { return a / b },
'%': function (a, b) { return a % b },
'**': function (a, b) { return a ** b }
}
return operation in operators ? operators[operation](x, y) : NaN
}
如果在 ES2015 + 环境(see the compatibility)上,箭头功能可以使它非常优雅:
function calculate(x, y, operation) {
const operators = {
'+': (a, b) => a + b,
'-': (a, b) => a - b,
'*': (a, b) => a * b,
'/': (a, b) => a / b,
'%': (a, b) => a % b,
'**': (a, b) => a ** b
}
return operation in operators ? operators[operation](x, y) : NaN
}
虽然我个人仍然认为简单的条件语句足以满足这种情况,但这种Object方法非常有趣,可以很好地展示JavaScript的灵活性。
答案 3 :(得分:0)
你应该把它分成4种不同的情况:
calculate: function(x,y,operation){
switch(operation){
case "*":
this.number = x*y;
break;
case "/":
this.number=x/y;
break;
case "+":
this.number= x+y;
break;
case "-":
this.number= x-y;
break;
default:
break;
}
return this.number;
}
它也很容易扩展......