为了账号安全,请及时绑定邮箱和手机立即绑定

在 Javascript 中,简单的计算器,不起作用

在 Javascript 中,简单的计算器,不起作用

Cats萌萌 2022-10-21 15:13:46
我试图通过 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"));
查看完整描述

3 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

你需要做两件事:

  1. 将输入解析为浮点数

  2. 映射用户给定的函数名

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?"))

);


查看完整回答
反对 回复 2022-10-21
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

我建议您花时间学习一些基础知识,除非您像这样使用 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"


查看完整回答
反对 回复 2022-10-21
?
呼如林

TA贡献1798条经验 获得超3个赞

计算器功能应该是:


function calculator(n1, n2, action){


    alert(eval(action+'('+n1+', '+n2+')'));

}


查看完整回答
反对 回复 2022-10-21
  • 3 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信