作为一名Java后端开发者,最近打算向着全栈的方向发展,刚好最近项目中要用到一个日历控件,所以就想着那来先练练手,谁知道一写,仿佛打开了新世界的大门。
问题
大家先来开下如下代码会输出什么?
var date = new Date(2019, 3, 0);
console.log(date);
date = new Date(2019,3,1);
console.log(date);
复制代码解题
之所以会碰到这个问题,是因为要计算某个月的最后一天是星期几,所以就去看了下MDN,发现没有对应的API,只有一个获取当前日期对象是星期几的方法getDay,所以问题又变成了怎么构造某个月份的最后一天的日期对象,难道要把每个月份的最后一天弄成一个数组(闰年二月需单独计算),遂去google搜索最优解,就有了上面的答案。
但是问什么呢?为什么当前月份+1,天指定为0,就是当前月份的最后一天的日期对象呢?再去翻看MDN,MDN中对setDate方法的说明如下
如果 dayValue 超出了月份的合理范围,setDate 将会相应地更新 Date 对象。例如,如果为 dayValue 指定0,那么日期就会被设置为上个月的最后一天。
至此,真相终于大白了,也就是说如果你设定的值超出合理范围,js会自动调整成新的日期对象,月份的合理值是(0 ~ 11),天的合理值是(1 ~ 31)。
疑惑
为什么要这样设计呢?超出合理值为什么不直接抛出异常呢?这样对新手好不友好啊,刚碰到这个,如果没看文档,就只能去猜了。
4078

被折叠的 条评论
为什么被折叠?



