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

原生JS计算器运算符切换异常问题求助

修复计算器运算符切换问题

问题根源在chooseOperation函数的逻辑:第一次按下运算符后,currentOperandScreen会被清空,此时再按新运算符,代码会执行evaluate(),但currentOperandScreen为空,parseFloat解析后得到NaN,最终导致错误的NaN -显示。

直接调整chooseOperation函数逻辑即可解决:

  • 当currentOperandScreen为空时,判定用户是要替换之前的运算符,直接更新运算符和显示内容,不执行计算
  • 只有当currentOperandScreen有有效数字时,才触发计算逻辑

修改后的chooseOperation函数:

function chooseOperation (operator) {
    // 当前输入框为空,直接替换运算符
    if (currentOperandScreen.innerHTML === '') {
        currentOperation = operator;
        previousOperandScreen.innerHTML = `${previousOperand} ${operator}`;
        return;
    }

    if (previousOperand !== '') {
        evaluate()
    }  
    previousOperand = currentOperandScreen.innerHTML;
    currentOperation = operator;
    currentOperandScreen.innerHTML = '';
    previousOperandScreen.innerHTML = `${previousOperand} ${operator}`;
}

额外给evaluate函数加一层防御,避免无效数字导致的错误:

function evaluate() {
    let result;
    const prev = parseFloat(previousOperand);
    const current = parseFloat(currentOperandScreen.innerHTML);

    // 若任一数字无效,直接终止计算
    if (isNaN(prev) || isNaN(current)) return;

    switch (currentOperation) {
        case "+":
            result = add(prev, current);
            break;
        case "-":
            result = subtract(prev, current);
            break;
        case "÷":
            if(current === 0) {
                result = "Error"
            } else {
                result = divide(prev, current)
            };
            break;
        case "x":
            result = multiply(prev, current);
            break;
        default:
            return;
    }

    if (isEqualsPressed) {
        previousOperandScreen.innerHTML = `${prev} ${currentOperation} ${current} =`
        currentOperandScreen.innerHTML = result;
    }

    currentOperand = result;
    currentOperandScreen.innerHTML = result;
    currentOperation = undefined;
    previousOperand = '';
}

调整后,用户输入2→按+→按-,屏幕会直接显示2 -,不会再出现NaN相关错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:22:40