原生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
相关产品推荐
相关产品推荐

