JS计算器开发求助:动态运算符与输入等待逻辑问题
计算器开发问题解决方案
问题1:让equals函数动态获取运算符执行对应运算
你需要把运算符单独存储到全局变量,而非在点击运算符按钮时直接计算,这样equals函数就能根据该变量判断运算类型:
- 声明全局变量存储状态:
let currentOperator = null; let previousValue = null; let currentValue = null;
- 修改运算符按钮点击事件,仅存储运算符不立即计算:
operatorButtons.forEach(btn => { btn.addEventListener('click', () => { if (display.textContent === '') return; // 保存当前显示屏数值并清屏 previousValue = parseFloat(display.textContent); display.textContent = ''; // 记录当前点击的运算符 currentOperator = btn.textContent; }); });
- 重写equals函数,依据存储的运算符执行运算:
function equals() { if (!currentOperator || previousValue === null) return; // 获取用户输入的新数值 currentValue = parseFloat(display.textContent); let result; switch(currentOperator) { case '+': result = previousValue + currentValue; break; case '-': result = previousValue - currentValue; break; case '*': result = previousValue * currentValue; break; case '/': // 新增除数非0判断 result = currentValue !== 0 ? previousValue / currentValue : 'Error'; break; default: return; } // 展示结果并重置状态,方便后续运算 display.textContent = result; previousValue = typeof result === 'number' ? result : null; currentOperator = null; }
问题2:等待用户输入新数值后再获取currentValue
无需在switch里主动调用currentNumber函数,让用户输入数字时自动更新显示屏,点击等号时再读取显示屏内容作为currentValue即可:
- 数字按钮事件处理,负责更新显示屏内容:
numberButtons.forEach(btn => { btn.addEventListener('click', () => { // 避免重复添加小数点 if (btn.textContent === '.' && display.textContent.includes('.')) return; display.textContent += btn.textContent; }); });
- 完整流程逻辑:
用户输入第一个数 → 点击运算符 → 保存前值并清屏 → 用户输入第二个数 → 点击等号 → equals函数读取显示屏的第二个数,结合存储的运算符完成运算。
内容的提问来源于stack exchange,提问作者DSM
相关产品推荐
相关产品推荐

