有个弱弱的问题,看这段代码:
function addMonths(d, n, keepTime) { // prevents day overflow/underflow
if (+d) { // prevent infinite looping on invalid dates
var m = d.getMonth() + n,
check = cloneDate(d);
check.setDate(1);
check.setMonth(m);
d.setMonth(m);
if (!keepTime) {
clearTime(d);
}
while (d.getMonth() != check.getMonth()) {
d.setDate(d.getDate() + (d < check ? 1 : -1));
}
}
return d;
}
代码中的if(+d)是什么意图呢? d是一个日期类型参数,// prevent infinite looping on invalid dates 翻译成汉语应该是:阻止在不合法的日期上的无限循环吧。但是我实在想不出这句注视和if(+d) 有什么联系。百度得结果+和valueOf有些关系,但是在这里的意图,我不懂啊。求高手解答
不要那个+会怎么样啊?
我注释了一下
1 //当前日期d,过n个月,是否保持Time部分的值,并且防止下溢和上溢
2 function addMonths(d, n, keepTime) {
3 //+d 将d转换为number,类型为number, 如果d 是Date那么值是d.getTime()的值
4 if (+d) { // 如为有效日期除(UTC 1970,1,1)外,执行下面
5 var m = d.getMonth() + n, // d.getMonth() 返回 0 - 11, m 会超出范围,没有关系
6 check = cloneDate(d); // check 为 d 的clone,因为 d 是 引用的,下面的操作需要一个副本
7 //为什么这么麻烦,是想得到 比如 2011年12月31日 加 2月 变为 2012年2月29日,而不是2012年3月2日
8 check.setDate(1);
9 check.setMonth(m);
10 d.setMonth(m);
11 if (!keepTime) { //是否保持时间部分
12 clearTime(d);
13 }
14 while (d.getMonth() != check.getMonth()) {// 如果超出范围了,那么调整回来
15 d.setDate(d.getDate() + (d < check ? 1 : -1));
16 }
17 }
18 return d;
19 }
好像是防止溢出的吧