JS二进制转十进制无输出问题:转换函数故障排查求助
十进制与二进制互转函数修复方案
问题根源
你的代码存在重复条件判断的逻辑错误:当调用binarioDecimal(101, 10)时,第一个else if (typeof number === "number" && typeof base === "number")已经匹配成功,程序只会进入该分支判断base === 2(不成立),随后直接跳出逻辑,第二个相同条件的else if永远不会触发,导致二进制转十进制的代码完全没机会执行。
修复后的完整代码
const binarioDecimal = (number = 0, base = 0) => { // 处理默认参数或0值情况 if (number === 0 || base === 0) { console.log(0); return; // 提前退出,简化嵌套逻辑 } // 统一处理合法数字参数 if (typeof number === "number" && typeof base === "number") { // 十进制转二进制逻辑 if (base === 2) { let num = number; let binary = (num % 2).toString(); for (; num > 1; ) { num = parseInt(num / 2); binary = (num % 2) + binary; } console.log(binary); } // 二进制转十进制逻辑 else if (base === 10) { let decimal = 0, i = 0, resto; let num = number; // 用局部变量存值,避免修改原参数产生副作用 while (num !== 0) { resto = num % 10; num = Number.parseInt(num / 10); decimal += resto * Math.pow(2, i); i++; } console.log(decimal); } // 处理不支持的进制 else { console.log("仅支持十进制转二进制、二进制转十进制的互转"); } } // 处理参数类型错误 else { console.log("参数必须为数字类型"); } }; // 测试验证 binarioDecimal(); // 0 binarioDecimal(23, 2); // 10111 binarioDecimal(101, 10); // 5(正常输出)
额外优化说明
- 给初始判断添加
return语句,减少嵌套层级,逻辑更直观 - 二进制转十进制部分改用局部变量
num存储值,避免修改原入参带来的意外问题 - 增加了非法进制、参数类型错误的提示,提升函数健壮性
内容的提问来源于stack exchange,提问作者user15500092
相关产品推荐
相关产品推荐

