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,150评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,281评论 0 4
  • 我已经抛下了很多 我想到头来…… 我们整个人生就是在放手而已 但是最让人伤痛的总是…… 没有好好的说声 再见!
    默___阅读 253评论 0 0
  • 提到艺术心理学,我首先想到的是早些年看过的潘诺夫斯基论丢勒的《忧郁之一》,书中潘诺夫斯基深入研究了文艺复兴著名画家...
    静雅日语翻译工作室阅读 656评论 0 0
  • 墨城,本是一座甲安山上临时建立的小城,却因为“墨语”而显得神秘莫测。 当时,天下群雄并起,拥兵自立,天下呈现了五分...
    语旅阅读 1,278评论 1 10