Javascript 基于传入参数的计算器函数
我正在做一个简单的计算器作为家庭作业。该函数以两个数字(number1、number2)和一个运算符(+、-、*、/)作为参数 但是,有几种情况:Javascript 基于传入参数的计算器函数,javascript,function,if-statement,Javascript,Function,If Statement,我正在做一个简单的计算器作为家庭作业。该函数以两个数字(number1、number2)和一个运算符(+、-、*、/)作为参数 但是,有几种情况: 如果操作员缺少-->返回“提供的数据错误” 如果没有,则正常计算 如果缺少数字2-->假定+&-计算的数字为“0”,而*&/计算的数字为“1” 编辑:场景3应该只考虑传入的2个参数(1个数字和1个运算符)。我知道这不是调用函数的正确方法,但它是我试图解决的任务的一部分。 这就是我试过的 function calc (number1, number2,
function calc (number1, number2, operator) {
if (operator == undefined) {
return "wrong data provided"
} else {
if (operator == "+") {
return number1+number2
} else if (operator == "-") {
return number1-number2
} else if (operator == "*") {
return number1*number2
} else if (operator == "/") {
return number1/number2
}
}
if (number2 == undefined) {
if (operator == "+") {
number2=0;
return number1+number2
} else if (operator == "-") {
number2=0;
return number1-number2
} else if (operator == "*") {
number2=1;
return number1*number2
} else if (operator == "/") {
number2=1;
return number1/number2
}
} else {
if (operator == "+") {
return number1+number2
} else if (operator == "-") {
return number1-number2
} else if (operator == "*") {
return number1*number2
} else if (operator == "/") {
return number1/number2
}
}
}
计算(50,“+”)导致“提供的数据错误。为什么
calc(50,"+")
这里只传递2个参数,所以第3个参数未定义
calc(50,,"+")
改为传递3个参数您可以定义以下变量
- 数字1将来自params
- 除非有运算符而不是数字,否则数字2将作为参数。如果有运算符,它将是0或1,具体取决于运算符
- 操作员将从参数或数字2中获取其值
const运算符=[“+”、“-”、“*”、“/”];
功能计算(编号1、n2、op){
//我补充的部分
让我们看一看2号;
设算子=op;
if(操作员。包括(n2)){
如果(n2==“+”| n2==“-”){
数字2=0;
}否则{
数字2=1;
}
运算符=n2;
}否则{
数字2=n2;
}
if(运算符==未定义){
返回“提供的数据错误”
}否则{
如果(运算符=“+”){
返回编号1+编号2
}else if(运算符=“-”){
返回编号1-编号2
}else if(运算符=“*”){
返回编号1*2
}else if(运算符==“/”){
返回编号1/编号2
}
}
if(number2==未定义){
如果(运算符=“+”){
数字2=0;
返回编号1+编号2
}else if(运算符=“-”){
数字2=0;
返回编号1-编号2
}else if(运算符=“*”){
数字2=1;
返回编号1*2
}else if(运算符==“/”){
数字2=1;
返回编号1/编号2
}
}否则{
如果(运算符=“+”){
返回编号1+编号2
}else if(运算符=“-”){
返回编号1-编号2
}else if(运算符=“*”){
返回编号1*2
}else if(运算符==“/”){
返回编号1/编号2
}
}
}
console.log(calc(50,“+”);
您将错误的数据传递给函数。
在javascript中,需要传递所有参数
calc(50, "+")
您将得到一个未定义的第三个参数,并且始终是“提供的数据错误”
试试这个
calc(50, 0, "+")
更好的代码:
function calculate(number1,number2,operator){
if (!number1 || !number2){
return "Invalid number"
}
if (!['*','-','/','+'].includes(operator)){
return "Invalid operator"
}
switch(operator){
case "+":
return number1 + number2;
case "/":
return number1 * number2;
case "*":
return number1 * number2;
case "-":
return number1 - number2;
}
}
console.log(calculate(5,6,"+"))
如前所述,您必须使用正确的参数进行调用。
calc(50,0,“+”)
。但是,您可以使用许多库中常见的hack
函数计算(编号1、编号2、运算符){
运算符=运算符| |编号2;
number2=(number2==运算符)?未定义:number2;
//其余的保持不变
if(运算符==未定义){
返回“提供的数据错误”
}
第一步-operator=operator | | number2;
-是将operator
设置为operator
,但如果它是falsy(假、未定义、0等),它将分配number2
第二步-number2=(number2==运算符)?未定义:number2;
是将number2设置为未定义,如果number2和运算符严格相等。
如果它们不相同,则指定原始值aka number2
现在您可以调用calc(50,“+”)
,它将执行与calc(50,0,“+”)
编辑:请注意,这现在不起作用,因为firstif
将为false,因此它将立即尝试进行计算…因此您必须至少以这种方式更改它:
if(运算符==未定义){
返回“提供的数据错误”
}否则如果(数字2!=未定义){
...
您可以执行以下操作:
函数计算(par1、par2、par3){
var number1=par1;
var算子;
var数2;
如果(par2的类型=='string'){
运算符=par2;
}否则{
数字2=par2;
运算符=par3;
}
if(运算符类型==“未定义”){
返回“提供的数据错误”
}否则{
如果(运算符=“+”){
返回数字1+(数字2 | | 0);
}else if(运算符=“-”){
返回编号1-(编号2 | | 0);
}else if(运算符=“*”){
返回number1*(number2的类型=='undefined'?1:0);
}else if(运算符==“/”){
返回number1/(typeof number2=='undefined'?1:0);
}
}
}
控制台日志(计算(50'+);
控制台日志(计算(50,*);
日志(计算(50,20'+');
日志(计算(50,未定义“*”);
console.log(calc(50,10));
参数按顺序排列,意思是calc(50,“+”
具有number1
as50
,number2
as”+"
和运算符
作为未定义的参数。您的number2
参数在哪里?对不起,我忘了提一下,它应该只说明传递的1个数字和1个参数。除了调用函数的方式之外,您还有错误的检查顺序,如果运算符不是未定义的
,您将永远不会看到er检查number2
是否未定义。如果运算符未定义或任何+
、-
、*
或/
字符,则函数将始终从第一个if…else
语句返回。正如一般想法一样,如果您假定0表示+和-和1对于*和/如果数字2缺失,这只是说“如果数字2缺失,返回数字1”的一种复杂方式。节省了大量代码和检查。OP提到number2
可以未定义