首页 新闻 会员 周边

javascript中的+

0
悬赏园豆:20 [已解决问题] 解决于 2011-12-28 13:24

有个弱弱的问题,看这段代码:

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有些关系,但是在这里的意图,我不懂啊。求高手解答

问题补充:

不要那个+会怎么样啊?

xinchuang的主页 xinchuang | 初学一级 | 园豆:3
提问于:2011-12-27 23:42
< >
分享
最佳答案
0

我注释了一下

 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 }
收获园豆:15
ChatinCode | 老鸟四级 |园豆:2272 | 2011-12-28 12:22
其他回答(1)
0

好像是防止溢出的吧

收获园豆:5
JasonNET | 园豆:168 (初学一级) | 2011-12-28 09:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册