JS实现简易计算器前置0计算错误、除0返回Infinity问题求解
问题根源
- 前导零数字计算异常:JavaScript 中以
0开头且不含小数点的数字会被默认识别为八进制数,012的八进制值对应十进制的10,因此012 + 3运算结果为13,不符合预期。 - 除以0返回Infinity:JavaScript 中数值除以0不会触发运行时异常,
eval执行后会直接返回Infinity或-Infinity,无法被现有try catch捕获,因此不会进入错误分支。
适配现有代码的修改方案
只需要修改case '='对应的逻辑块即可,修改后完整代码如下:
let output = document.getElementById('output'); let cells = Array.from(document.getElementsByClassName('cell')); cells.map(cell => { cell.addEventListener('click', (e) => { switch (e.target.innerText) { case 'C': output.innerText = ''; break; case '=': try { // 处理前导零:仅替换非小数场景的前导零,不影响0.xx类合法小数 let express = output.innerText.replace(/(\D|^)0+(\d+)/g, '$1$2'); let res = eval(express); // 判断结果是否为有限值,覆盖除以0、非法运算场景 output.innerText = isFinite(res) ? res : 'Error'; } catch { output.innerText = 'Error!'; } break; default: output.innerText += e.target.innerText; } }); });
内容的提问来源于stack exchange,提问作者Valentina
相关产品推荐
相关产品推荐

