开发出生日期星期计算器时嵌套if语句失效问题求助
问题排查:嵌套if语句失效的核心原因
我帮你梳理了代码里的几个关键问题,这些直接导致嵌套if无法正常工作:
1. 变量混淆:拿数组和数字做无效比较
你定义了一个month数组month=[1,4,4,0,2,5,0,3];,但在myReturn函数里,你一直在用这个数组对象和数字(比如01、02)做相等判断。数组和数字永远不可能相等,所以所有if分支都不会触发,直接走到else { console.log('error'); }分支。
你实际应该使用的是用户输入的月份值,而且要把prompt返回的字符串转成数字类型。
2. 无终止条件的递归调用,直接导致函数崩溃
在myReturn函数的最后,你写了myReturn(month),这是一个没有终止逻辑的递归调用,会瞬间触发浏览器栈溢出错误,函数还没执行完就崩溃了,自然if语句根本没机会正常运行。
3. 参数传递与类型不匹配问题
myReturn函数定义时没有声明参数,但你调用的时候却传了month,逻辑完全混乱;- prompt返回的是字符串类型,比如用户输入
01,得到的是字符串"01",你直接和数字01(等价于1)比较,因为类型不同,"01" === 1会返回false,导致所有月份判断分支都不生效。
修复后的代码示例
我把上述问题都修正了,你可以参考测试:
// 先把用户输入转成数字类型 var DD = parseInt(prompt("请输入您的出生日期日份:")); var MM = parseInt(prompt("请输入您的出生日期月份:")); var YY = parseInt(prompt("请输入您的出生日期年份:")); var fullDate = `${DD} / ${MM} / ${YY}`; alert(fullDate); var cc = parseInt(YY.toString().slice(0,2)); var myFunction = 6 + (DD + Math.floor((YY % 100)/4)); var myNumbers; // 修正函数,明确接收月份参数 function myReturn(inputMonth) { if (cc === 20) { // 用转成数字的月份做判断 if (inputMonth === 1) { myNumbers = 1 + myFunction; } else if (inputMonth === 2 || inputMonth === 3) { myNumbers = 4 + myFunction; } else if (inputMonth === 4 || inputMonth === 7) { myNumbers = 0 + myFunction; } else if (inputMonth === 5) { myNumbers = 2 + myFunction; } else if (inputMonth === 6) { myNumbers = 5 + myFunction; } else if (inputMonth === 8) { myNumbers = 3 + myFunction; } else { console.log('error:月份输入不正确'); } // 这里可以继续处理计算结果,比如取模7得到星期几 console.log('计算结果:', myNumbers); } else { console.log('incorrect:仅支持20世纪的年份'); } } // 调用函数,传入用户输入的月份 myReturn(MM);
额外优化建议
你定义的month数组其实可以替代嵌套if,让代码更简洁:
// 索引对应1-8月的偏移值,索引0留空不用 var monthOffsets = [0, 1, 4, 4, 0, 2, 5, 0, 3]; // 在函数里直接取值 if (cc === 20 && inputMonth >=1 && inputMonth <=8) { myNumbers = monthOffsets[inputMonth] + myFunction; } else { console.log('error'); }
内容的提问来源于stack exchange,提问作者wendy
相关产品推荐
相关产品推荐

