在Javascript中,简单的计算器,不起作用
我试图通过prompt()获取数字,并获取操作名称。但结果并不像预期的那样 我是编程新手。。 代码:在Javascript中,简单的计算器,不起作用,javascript,function,prompt,Javascript,Function,Prompt,我试图通过prompt()获取数字,并获取操作名称。但结果并不像预期的那样 我是编程新手。。 代码: 函数add(n1,n2){返回n1+n2;} 函数sub(n1,n2){返回n1-n2;} 函数mult(n1,n2){返回n1*n2;} 函数div(n1,n2){返回n1/n2;} 函数计算器(n1、n2、动作){ 警报(行动(n1、n2)); } 计算器(提示(“第一个编号”)、提示(“第二个编号”)、提示(“计算”); 您需要做两件事: 将输入解析为float 映射用户给定的函数名 函
函数add(n1,n2){返回n1+n2;}
函数sub(n1,n2){返回n1-n2;}
函数mult(n1,n2){返回n1*n2;}
函数div(n1,n2){返回n1/n2;}
函数计算器(n1、n2、动作){
警报(行动(n1、n2));
}
计算器(提示(“第一个编号”)、提示(“第二个编号”)、提示(“计算”);
您需要做两件事:
函数add(n1,n2){返回n1+n2;}
函数sub(n1,n2){返回n1-n2;}
函数mult(n1,n2){返回n1*n2;}
函数div(n1,n2){返回n1/n2;}
函数计算器(n1、n2、动作){
警报(行动(n1、n2));
}
函数findOperation(名称){
交换机(名称){
案例“sub”:
返回子节点;
“mult”案:
返回mult;
案件“div”:
返回div;
案例“添加”:
违约:
返回添加;
}
}
计算器(
parseFloat(提示(“第一个编号”),
parseFloat(提示(“第二个否”),
findOperation(提示(“操作名称?”))
);代码>您需要做两件事:
将输入解析为float
映射用户给定的函数名
函数add(n1,n2){返回n1+n2;}
函数sub(n1,n2){返回n1-n2;}
函数mult(n1,n2){返回n1*n2;}
函数div(n1,n2){返回n1/n2;}
函数计算器(n1、n2、动作){
警报(行动(n1、n2));
}
函数findOperation(名称){
交换机(名称){
案例“sub”:
返回子节点;
“mult”案:
返回mult;
案件“div”:
返回div;
案例“添加”:
违约:
返回添加;
}
}
计算器(
parseFloat(提示(“第一个编号”),
parseFloat(提示(“第二个否”),
findOperation(提示(“操作名称?”))
);代码>计算器功能应为:
function calculator(n1, n2, action){
alert(eval(action+'('+n1+', '+n2+')'));
}
计算器功能应为:
function calculator(n1, n2, action){
alert(eval(action+'('+n1+', '+n2+')'));
}
我建议您花点时间学习一些基础知识,除非您像这样使用eval(),否则无法将字符串转换为函数调用:
function add(n1, n2){ return n1 + n2;}
function sub(n1, n2){ return n1 - n2;}
function mult(n1, n2){ return n1 * n2;}
function div(n1, n2){ return n1/n2;}
function calculator(n1, n2, action){
alert(eval(`${action}(${n1}, ${n2})`));
}
calculator(prompt("first no,"), prompt("second No"), prompt("calc"));
但这是真正的黑客和不安全的代码,更好的方法是:
const ops = {
"add": (n1, n2) => n1 + n2,
"sub": (n1, n2) => n1 - n2,
"mult": (n1, n2) => n1 * n2,
"div": (n1, n2) => n1/n2
}
function calculator(n1, n2, action){
alert(ops[action](parseFloat(n1), parseFloat(n2)));
}
calculator(prompt("first no,"), prompt("second No"), prompt("calc"));
还要注意parseFloat(),如果将参数保留为字符串,则将获得:
输入:“1”、“2”、“添加”
输出:“12”
我建议您花点时间学习一些基础知识,除非您像这样使用eval(),否则无法将字符串转换为函数调用:
function add(n1, n2){ return n1 + n2;}
function sub(n1, n2){ return n1 - n2;}
function mult(n1, n2){ return n1 * n2;}
function div(n1, n2){ return n1/n2;}
function calculator(n1, n2, action){
alert(eval(`${action}(${n1}, ${n2})`));
}
calculator(prompt("first no,"), prompt("second No"), prompt("calc"));
但这是真正的黑客和不安全的代码,更好的方法是:
const ops = {
"add": (n1, n2) => n1 + n2,
"sub": (n1, n2) => n1 - n2,
"mult": (n1, n2) => n1 * n2,
"div": (n1, n2) => n1/n2
}
function calculator(n1, n2, action){
alert(ops[action](parseFloat(n1), parseFloat(n2)));
}
calculator(prompt("first no,"), prompt("second No"), prompt("calc"));
还要注意parseFloat(),如果将参数保留为字符串,则将获得:
输入:“1”、“2”、“添加”
输出:“12”
,操作必须是一个函数,但您可以向其传递一个字符串(浏览器会在控制台中告诉您:类型错误:操作不是函数
),而不是执行此操作,您可以创建具有这些方法的对象并调用这些方法。我应该在代码中的何处更改以按预期工作?,action
必须是一个函数,但您可以向它传递一个字符串(浏览器将在控制台中告诉您:TypeError:action不是函数
),而不是执行此操作,您可以创建一个具有这些方法的对象并调用这些方法。我应该在代码中的什么地方进行更改才能按预期工作?