今天在寫代碼的時候發現了一個詭異的事情,先看下面這兩行代碼:
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中的運算符會對操作數進行預處理,+
會將操作數轉化為字符串(除非兩操作數均為數字),-
會將操作數轉化為數字,具體的機制還不知道……