为什么我的 Javascript 计算器在按等号键后按运算符时答案会乘以 2?

Why does my Javascript calculator multiply the answer by 2 when pressing an operator following an equals press?

我正在努力完成 The Odin 项目,目前我被困在“计算器”项目上。

在大多数情况下,考虑到我目前的 Javascript 知识,我对它的工作方式感到满意。然而;按等号按钮输出计算结果后,如果我再按任何数学运算符 if 就会立即将显示的值乘以 2,我不明白为什么。

计算器可以在这里找到:https://nortski78.github.io/calculator/

要重现错误,请输入 5 + 5 = +(将显示 20)

我认为问题所在的代码部分是:

operatorButtons.forEach((operatorButton) => {
    operatorButton.addEventListener('click', (event) => {
        setOperand(getDisplayValue());        
        setOperator(event.target.textContent);  
        clear = true;
    })
})

btnEquals.addEventListener('click', (event) => {
    setOperand(getDisplayValue());
    operate(operator, firstOperand, secondOperand);
    clear = true;
})

function setOperand(operand){

    operand = parseFloat(operand);

    if(firstOperand === null) { firstOperand = operand; }
    else { 
        secondOperand = operand;
        clear = true;
        updateDisplay(operate(operator, firstOperand, secondOperand));
        firstOperand = getDisplayValue();
    }
}

function setOperator(digit){

    if(digit != "="){
        operator = digit;
    }
}

function operate(operator, num1, num2){

    switch(operator){
        case "+":
            return add(num1, num2);
            break;
        case "-":
            return subtract(num1, num2);
            break;
        case "*":
            return multiply(num1, num2);
            break;
        case "/":
            return divide(num1, num2);
            break;
    }
}

点击 + 调用 setOperand。那里 if(firstOperand === null) 不会是真的,您之前已经为该变量分配了一个值(当您处理前一个 + 按钮单击时),并且它再也不会在任何地方再次“无效”。

所以这会继续分配 secondOperand,然后它会调用 updateDisplay 包装的 operate

所以在按下=之后,你必须重新设置你的第一个操作数,这样当它再次经过setOperand时,它会先分配一个新的第一个操作数,并且只执行计算&在第二个操作数上显示更新。