Javascript 加号在'+;新日期';

Javascript 加号在'+;新日期';,javascript,syntax,Javascript,Syntax,我在几年前就见过这种情况 我可以看到它返回的是一个时间戳而不是一个日期对象,但是我找不到任何关于加号在做什么的文档 有人能解释一下吗?JavaScript是松散类型的,因此它在某些情况下执行类型强制/转换: 其他例子: >>> +new Date() 1224589625406 >>> +"3" 3 >>> +true 1 >>> 3 == "3" true 它的作用与: function(){ return 0+ne

我在几年前就见过这种情况

我可以看到它返回的是一个时间戳而不是一个日期对象,但是我找不到任何关于加号在做什么的文档


有人能解释一下吗?

JavaScript是松散类型的,因此它在某些情况下执行类型强制/转换:


其他例子:

>>> +new Date()
1224589625406
>>> +"3"
3
>>> +true
1
>>> 3 == "3"
true

它的作用与:

function(){ return 0+new Date; } 函数(){返回0+新日期;} 其结果与:

function(){ return new Date().getTime(); } 函数(){返回新日期().getTime();}
这是+一元运算符,它等价于:

function(){ return Number(new Date); }
见:


在MDN中:

这里是关于“一元添加”操作符的。希望对您有所帮助……

JavaScript日期可以写成字符串:

2015年9月10日星期四12:02:54 GMT+0530(IST)

或作为一个数字:

t = new Date() - 0; //numeric value of Date: number of msec's since 1 Jan 1970.
typeof t; // "number"
1441866774938

以数字形式写入的日期,指定自1970年1月1日00:00:00以来的毫秒数

对于您的问题,在赋值运算符“=”之后添加“+”,将日期转换为相等的数值

同样可以使用Number()函数实现,比如Number(newdate())

它是一个一元加法运算符,也用于显式数字转换,因此当您调用
+new Date()
时,它会尝试使用
valueOf()
获取该对象的数值,就像我们从
到字符串()
获取字符串一样


只是想提供更多信息:

如果你还记得,当你想找出两个日期之间的时差时,你只需做以下事情

var d1 = new Date("2000/01/01 00:00:00"); 
var d2 = new Date("2000/01/01 00:00:01");  //one second later

var t = d2 - d1; //will be 1000 (msec) = 1 sec

typeof t; // "number"
现在,如果您检查d1-0的类型,它也是一个数字:

t = new Date() - 0; //numeric value of Date: number of msec's since 1 Jan 1970.
typeof t; // "number"
该+还将日期转换为数字:

typeof (+new Date()) //"number"
但是请注意,
0+newdate()
被同样对待!它将连接为字符串:

0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"

不在0+新日期。它首先将日期转换为字符串,然后在前面加上一个“0”(例如:“0Tue Oct 21 2008 20:38:05 GMT-0400”);1*新日期将生效,但1+新日期-->字符串也适用于
新日期/1
但为什么不在日期对象上使用定义的
getTime
方法?!在几乎任何情况下,你都不应该实际使用这个。我真的被这个烫伤了+除任何类型的数学运算外,new Date()将受到严重的性能损失。看看这个jsperf,@BradKoch在编程上的简洁显然不是灵魂的智慧。正如python社区充分指出的那样,“显式总是比隐式好。”如果浏览器通过回归改变了其中隐含的自动类型转换,该怎么办?现在你的代码就是不起作用了
.getTime()
将始终确保它确实如此。@GEUI是另一个很好的理由,仅仅因为你可以,并不意味着你应该这样做!在ECMAScript 5中存在
Date.now()
,这是以毫秒为单位获取日期和时间的首选方法。可能存在>>>3==“3”false的重复
typeof (+new Date()) //"number"
0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"