咨询:基于元素innerText运算符字符串实现计算器单函数运算的可行性
实现单一函数适配多运算的计算器方案
当然可以基于运算符字符串实现单一函数适配不同数学运算,最简洁且易维护的方式是用对象映射运算符到对应的运算逻辑,同时能解决你原代码里的语法错误问题。
优化后的完整代码
首先修正事件绑定逻辑(确保点击时获取最新的运算符):
const equals = document.getElementById("equals"); equals.addEventListener('click', () => { const operator = symbol.innerText; // 点击时实时获取当前运算符 getResult(operator); });
然后是重构后的getResult函数:
function getResult(operator) { // 提取运算数并转为数字类型 const num1 = Number(calculations1.innerText); const num2 = Number(calculations2.innerText); // 运算符-运算逻辑映射表 const operations = { '+': (x, y) => x + y, '-': (x, y) => x - y, '*': (x, y) => x * y, '/': (x, y) => y === 0 ? 'Error' : x / y, '%': (x, y) => x % y }; // 执行运算并更新结果,处理非法运算符情况 const calcFn = operations[operator]; result.innerText = calcFn ? calcFn(num1, num2) : 'Invalid Op'; }
优化点说明
- 用对象映射替代冗余的
if/else判断,新增运算符只需在operations里添加键值对,扩展性极强 - 提前提取并转换运算数,避免重复解析DOM文本
- 加入了除数为0、非法运算符的边界处理,提升计算器的鲁棒性
- 代码结构清晰,逻辑一目了然
内容的提问来源于stack exchange,提问作者kozuba
相关产品推荐
相关产品推荐

