JS计算器代码问题排查:点击按键无数字显示如何解决?
代码核心问题整理
- 点击事件完全没生效:你给元素绑定点击事件时,把数组的遍历方法写错了,
numberButtons.forEach = (button) => {}这里多写了等号,等于直接覆盖了JS自带的遍历逻辑,根本不会给按钮绑定事件,所以点任何按钮都没反应。正确写法应该是numberButtons.forEach(button => {}),去掉等号。 - 代码执行顺序完全颠倒:你把
querySelector获取DOM元素的代码写在了绑定点击事件的代码后面,绑定事件时要用到的按钮、显示区域变量还不存在,直接报错打断代码执行。必须把所有获取DOM的代码放到JS最开头。 - calculator对象定义完全错误:你写的
const calculator = (previousOperandTextElement, currentOperandTextElement, operation);既不是构造函数也不是对象,后面调用calculator.compute()之类的写法完全找不到对应方法,所有你定义的clear、compute等方法都是全局函数,不属于calculator。 - 核心变量未声明:
currentOperand、previousOperand这些存储输入值的核心变量你从来没声明过初始值,直接拼接字符串会得到undefined1之类的异常结果。 - 方法名不匹配:你定义的删除方法叫
remove(),但是删除按钮的点击事件里调用的是calculator.delete(),名字对不上,点删除会直接报错。 - 变量名冲突:
chooseOperation方法里参数名和全局的operation变量同名,operation = operation这行等于把参数赋值给参数本身,根本改不了全局的运算符变量,计算逻辑完全走不通。 - 运算符匹配错误:HTML里的乘号是
x,但你JS的compute方法里判断的乘号是*,点乘号计算会直接走default分支不执行运算。
重写建议
你从零开始写的话可以按这个顺序来,不容易出问题:
- 先写所有获取DOM元素的代码,拿到所有按钮、显示区域的节点
- 声明所有需要用到的全局变量:当前输入值、上一次输入值、选中的运算符,初始值都设为空或者undefined
- 逐个实现功能函数:清空、删除、追加数字、选运算符、计算、更新显示
- 给每个按钮绑定对应的点击事件,绑定的时候先在函数里打
console.log('点击了')测试事件是否生效,再写具体逻辑
内容的提问来源于stack exchange,提问作者Natalie Mae
相关产品推荐
相关产品推荐

