You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS计算器开发求助:动态运算符与输入等待逻辑问题

计算器开发问题解决方案

问题1:让equals函数动态获取运算符执行对应运算

你需要把运算符单独存储到全局变量,而非在点击运算符按钮时直接计算,这样equals函数就能根据该变量判断运算类型:

  1. 声明全局变量存储状态:
let currentOperator = null;
let previousValue = null;
let currentValue = null;
  1. 修改运算符按钮点击事件,仅存储运算符不立即计算:
operatorButtons.forEach(btn => {
  btn.addEventListener('click', () => {
    if (display.textContent === '') return;
    // 保存当前显示屏数值并清屏
    previousValue = parseFloat(display.textContent);
    display.textContent = '';
    // 记录当前点击的运算符
    currentOperator = btn.textContent;
  });
});
  1. 重写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即可:

  1. 数字按钮事件处理,负责更新显示屏内容:
numberButtons.forEach(btn => {
  btn.addEventListener('click', () => {
    // 避免重复添加小数点
    if (btn.textContent === '.' && display.textContent.includes('.')) return;
    display.textContent += btn.textContent;
  });
});
  1. 完整流程逻辑:
    用户输入第一个数 → 点击运算符 → 保存前值并清屏 → 用户输入第二个数 → 点击等号 → equals函数读取显示屏的第二个数,结合存储的运算符完成运算。

内容的提问来源于stack exchange,提问作者DSM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:22:46