JS中运算符对操作数的重载作用

今天在写代码的时候发现了一个诡异的事情,先看下面这两行代码:

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中的运算符会对操作数进行预处理,+会将操作数转化为字符串(除非两操作数均为数字),-会将操作数转化为数字,具体的机制还不知道……

你可能感兴趣的:(JS中运算符对操作数的重载作用)