如何在JavaScript中判断闰年?代码问题排查与修正
闰年判断代码的问题修正与解析
嗨,很高兴你已经定位到核心问题啦!咱们把整个问题拆解清楚:
首先,闰年的判定规则是:
- 能被 400 整除的年份,是闰年;
- 或者能被 4 整除,但不能被100整除的年份,是闰年。
你原代码里的错误逻辑:
(this.year % 4 === 0 && (this.year % 100 === 0))
这部分条件是在判断“能被4整除且能被100整除”,但这类年份(比如1900年)并不是闰年,除非它同时满足能被400整除(比如2000年)。所以你修正后的!(this.year % 100 === 0)才是正确的,它准确表达了“能被4整除但不能被100整除”的规则。
另外还有个容易被忽略的细节:你用箭头函数定义了原型方法isLeap,箭头函数不会绑定自身的this,它会继承外层作用域的this,这会导致this.year无法正确指向实例的year属性。建议把箭头函数改成普通函数,保证this的指向正确。
最终修正后的完整代码如下:
let Year = function(year) { this.year = year; }; Year.prototype.isLeap = function() { return (this.year % 400 === 0 || (this.year % 4 === 0 && !(this.year % 100 === 0))); }; // 测试示例 let year = new Year(2014); console.log(year.isLeap()); // 输出false,2014年确实不是闰年 let leapYear = new Year(2020); console.log(leapYear.isLeap()); // 输出true,符合预期
这样代码既保持了简洁性,又完全符合闰年的判定逻辑啦!
内容的提问来源于stack exchange,提问作者Mindsworth
相关产品推荐
相关产品推荐

