使用JavaScript的switch case和函数创建简易计算器遇undefined错误求助
计算器代码问题分析与修复
问题1:switch语句用法错误
switch只能接收单个判断表达式,你写的switch(a,b)完全不符合语法逻辑——要判断的是用户选择的操作符(tell变量),而不是两个数字参数,这里应该把tell作为switch的判断对象。
问题2:函数没有返回值
你的calculate函数里只计算了answer但没通过return返回结果,调用函数时自然会得到undefined,这就是弹窗显示undefined的核心原因。
问题3:字符串未转数字
prompt获取的输入是字符串类型,直接用+运算会变成字符串拼接(比如输入1和2,结果是"12"而不是3),必须把输入转成数字类型才能正确计算。
问题4:缺少异常处理
如果用户输入了非指定的操作符,或者除数为0,代码没有任何提示,体验很差,建议补充这些场景的处理。
修正后的代码
let tell = prompt("What would you like to do (*,/,+,-)"); // 把输入转成数字,同时兼容用户取消输入的情况 let dig1 = Number(prompt("Enter first Number")); let dig2 = Number(prompt("Enter second Number")); function calculate(num1, num2, operator) { let answer; switch (operator) { case "*": answer = num1 * num2; break; case "/": // 处理除数为0的错误 if (num2 === 0) { return "Error: 不能除以0"; } answer = num1 / num2; break; case "+": answer = num1 + num2; break; case "-": answer = num1 - num2; break; default: answer = "Error: 无效的操作符"; } return answer; } alert(calculate(dig1, dig2, tell));
额外优化说明
- 把操作符
tell作为参数传入函数,不再依赖全局变量,让函数逻辑更独立 - 增加了除数为0和无效操作符的错误提示
- 统一变量命名,让代码更易读
内容的提问来源于stack exchange,提问作者Kamil Rogozinski
相关产品推荐
相关产品推荐

