JavaScript十进制转二进制函数返回undefined问题求助
问题分析与修复
首先,你的代码在传入正整数时不会返回undefined——比如调用DecimalABinario(36)应该返回"100100"(36的二进制正确结果)。如果浏览器返回undefined,大概率是以下情况之一:
- 函数调用时未传入参数(比如
DecimalABinario()),此时num为undefined,三个if条件都不触发,数组为空,join('')返回空字符串,但不是undefined; - 代码在浏览器中未被完整执行(比如语法错误、脚本加载失败);
- 控制台输出的是函数执行之外的其他值。
不过你的代码存在逻辑缺陷,无法正确处理num=0的情况(会返回"1"而非正确的"0"),同时三个if条件可以合并优化,避免冗余判断:
修复后的代码
function DecimalABinario(num) { // 处理0的特殊情况 if (num === 0) { return "0"; } var arrayBinario = []; do { // 直接通过取余判断当前位是0还是1,无需分情况判断num大小 arrayBinario.unshift(num % 2 === 0 ? '0' : '1'); num = Math.floor(num / 2); } while (num > 0); return arrayBinario.join(''); } console.log(DecimalABinario(36)); // 输出 "100100" console.log(DecimalABinario(0)); // 输出 "0" console.log(DecimalABinario(1)); // 输出 "1"
优化点说明
- 新增
num=0的特殊处理:因为0的二进制就是"0",而原循环会至少执行一次,导致错误添加"1"; - 合并三个
if为一个三元表达式:直接通过num%2判断当前二进制位是0还是1,逻辑更简洁,避免重复判断num>1; - 循环条件改为
num>0:当num被除到0时就停止循环,逻辑更清晰。
内容的提问来源于stack exchange,提问作者Esteban Descouvieres
相关产品推荐
相关产品推荐

