有趣的JS日期函数

作为一名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)。

疑惑

为什么要这样设计呢?超出合理值为什么不直接抛出异常呢?这样对新手好不友好啊,刚碰到这个,如果没看文档,就只能去猜了。

转载于:https://juejin.im/post/5caaa3f8f265da24f178f7a0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值