在'+新日期'

我在一些的地方中见过这个

function fn() {
return +new Date;
}

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

有人能解释一下吗?

49711 次浏览

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

< p > http://blog.jeremymartin.name/2008/03/understanding-loose-typing-in.html < br > http://www.jibbering.com/faq/faq_notes/type_convert.html < / p >

其他的例子:

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

它所做的事情完全相同:

function(){ return 0+new Date; }

其结果与:

function(){ return new Date().getTime(); }

那是+一元操作符。它相当于:

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

参见http://xkr.us/articles/javascript/unary-add中数

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

JavaScript日期可以写成字符串:

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

或作为数字:

1441866774938

以数字形式书写的日期,指定从1970年1月1日00:00:00开始的毫秒数。

说到你的问题,它接缝通过在赋值运算符“=”后添加“+”,将日期转换为相等的数字值。

同样可以使用Number()函数实现,如Number(new Date());

var date = +new Date(); //same as 'var date =number(new Date());'

它是一个一元加操作符,也用于显式的数字转换,所以当你调用+new Date()时,它会尝试使用valueOf()获取该对象的数值,就像我们从toString()获取字符串一样

new Date().valueOf() == (+new Date)  // true

如果你还记得,当你想要找出两个日期之间的时间差时,你可以简单地这样做:

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"

+也会将Date转换为Number:

typeof (+new Date()) //"number"

但请注意,0 + new Date()将被类似地对待 !它将被连接为字符串:

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