在Javascript,简单的计算器,不工作
In Javascript, simple calculator, not working
我尝试通过 prompt() 获取数字,还有操作名称。但结果并不如预期
我是编程新手..
代码:
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(action(n1, n2));
}
calculator(prompt("first no,"), prompt("second No"), prompt("calc"));
您需要做两件事:
- 将输入解析为浮点数
- 映射用户给的函数名
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(action(n1, n2));
}
function findOperation(name) {
switch (name) {
case "sub":
return sub;
case "mult":
return mult;
case "div":
return div;
case "add":
default:
return add;
}
}
calculator(
parseFloat(prompt("first no,")),
parseFloat(prompt("second No")),
findOperation(prompt("Operation Name?"))
);
计算器函数应该是:
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"));
但这确实是 hacky 和不安全的代码,更好的方法是:
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(),如果将参数保留为字符串,您将得到:
input: "1", "2", "add"
output: "12"
我尝试通过 prompt() 获取数字,还有操作名称。但结果并不如预期
我是编程新手.. 代码:
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(action(n1, n2));
}
calculator(prompt("first no,"), prompt("second No"), prompt("calc"));
您需要做两件事:
- 将输入解析为浮点数
- 映射用户给的函数名
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(action(n1, n2));
}
function findOperation(name) {
switch (name) {
case "sub":
return sub;
case "mult":
return mult;
case "div":
return div;
case "add":
default:
return add;
}
}
calculator(
parseFloat(prompt("first no,")),
parseFloat(prompt("second No")),
findOperation(prompt("Operation Name?"))
);
计算器函数应该是:
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"));
但这确实是 hacky 和不安全的代码,更好的方法是:
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(),如果将参数保留为字符串,您将得到:
input: "1", "2", "add"
output: "12"