JavaScript嵌套if-else实现闰年判断时2016等年份识别错误如何解决
闰年判断代码故障排查与修复
核心故障原因
- 嵌套if-else的分支逻辑错误:符合「能被4整除但不能被100整除」规则的普通闰年,被错误判定为非闰年
- 可选优化:
prompt输入返回值为字符串类型,虽然取模运算会触发隐式类型转换,但存在特殊输入下的异常风险,建议显式转换为数值类型
错误逻辑复盘
原代码中,当年份满足y % 4 === 0且不满足y % 100 === 0时,进入的分支直接输出「不是闰年」,完全违背了普通闰年的判定规则:
// 原代码错误分支 if (y % 100 === 0) { // 世纪年判断逻辑... } else { // 此处本应为普通闰年,原代码错误输出非闰年 alert(y + " is not a leap year"); }
2000年属于世纪年,会走世纪年判定分支,因此结果正确;2016、2020属于普通闰年,命中上述错误分支,因此判定异常。
修复后代码
// 显式将输入转换为数值类型 const y = Number(prompt("Enter the year")); // 增加非法输入校验 if (isNaN(y)) { alert("请输入合法的年份数值"); } else if (y % 4 === 0) { if (y % 100 === 0) { // 世纪年判断 alert(y % 400 === 0 ? `${y} 是闰年` : `${y} 不是闰年`); } else { // 普通闰年判定正确分支 alert(`${y} 是闰年`); } } else { alert(`${y} 不是闰年`); }
内容的提问来源于stack exchange,提问作者Diksha
相关产品推荐
相关产品推荐

