今天在写代码的时候发现了一个诡异的事情,先看下面这两行代码:
let nowDate = new Date('2016-12-24')
nowDate = nowDate + 3600000 * 24;
console.log(nowDate);
console.log(new Date(nowDate));
我原本要获取下一天的日期,结果在进行运算的时候,忘记写了getTime()
方法,然后输出是这样的:
> Sat Dec 24 2016 08:00:00 GMT+0800 (CST)86400000
> Sat Dec 24 2016 08:00:00 GMT+0800 (CST)
这没啥可说的,正常表现,然而当我把代码中的加号改成减号后:
let nowDate = new Date('2016-12-24')
nowDate = nowDate - 3600000 * 24;//这里改成了减号
console.log(nowDate);
console.log(new Date(nowDate));
输出结果变成了这样:
> 1482451200000
> Fri Dec 23 2016 08:00:00 GMT+0800 (CST)
也就是直接输出了前一天的结果。
然后我又试了一下,发现日期类可以直接减去一个整数,并且直接获取到相减后的时间戳:
console.log(new Date('2016-12-14') - 2300);// output: 1481673597700
而加号却不行:
console.log(new Date('2016-12-14') + 2300);
// output: Wed Dec 14 2016 08:00:00 GMT+0800 (CST)2300
好吧,最后查明原因,JS中的运算符会对操作数进行预处理,+
会将操作数转化为字符串(除非两操作数均为数字),-
会将操作数转化为数字,具体的机制还不知道……
网友评论