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中,運算符主要是用以連接簡單表達式,組成復雜表達式,比如下面就是一個簡單的加號運算符組成的表達式;a + b...
    大春春閱讀 1,127評論 0 1
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 我已經拋下了很多 我想到頭來…… 我們整個人生就是在放手而已 但是最讓人傷痛的總是…… 沒有好好的說聲 再見!
    默___閱讀 249評論 0 0
  • 提到藝術心理學,我首先想到的是早些年看過的潘諾夫斯基論丟勒的《憂郁之一》,書中潘諾夫斯基深入研究了文藝復興著名畫家...
    靜雅日語翻譯工作室閱讀 643評論 0 0
  • 墨城,本是一座甲安山上臨時建立的小城,卻因為“墨語”而顯得神秘莫測。 當時,天下群雄并起,擁兵自立,天下呈現了五分...
    語旅閱讀 1,234評論 1 10