JavaScript实现圣诞夜日期判断函数时任意输入均返回true的求助
代码运行异常的原因
这段函数无论传入什么日期都恒定返回true,本质是判断逻辑写了两处核心错误:
- if判断块里的
date=("year, "+ month +", "+ day)使用了单等号=,这在JavaScript中属于赋值操作,不是相等比较。代码执行到这行时,会直接把拼接出的字符串"year, 11, 24"赋值给入参date,赋值操作的返回值就是这个非空字符串;按照JS的布尔判定规则,所有非空字符串都会被判定为true,因此if分支永远会被进入,自然永远返回true。 - 就算把单等号替换为相等比较运算符,这个判断逻辑也完全无效:Date实例和字符串做相等比较时,会因为类型不匹配永远判定为不等,而且这行代码全程没有读取传入Date对象的实际月份、日期数值,根本不可能完成圣诞夜的日期匹配。
修正实现方案
正确逻辑需要直接从入参的Date实例上读取日期属性,和目标值做严格相等校验:
- 调用
date.getMonth()获取0起始计数的月份值,12月对应的返回值固定为11 - 调用
date.getDate()获取当前日期是当月的第几天 - 两个属性值同时匹配12月、24日的条件时返回true,其余情况返回false
修正后可正常运行的代码:
function timeForMilkAndCookies(date) { return date.getMonth() === 11 && date.getDate() === 24; }
内容的提问来源于stack exchange,提问作者Mouma Garai
相关产品推荐
相关产品推荐

