254

我在几个地方看到过这个

function fn() {
    return +new Date;
}

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

谁能解释一下?

4

7 回答 7

311

那是+一元运算符。它相当于:

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

请参阅http://xkr.us/articles/javascript/unary-addMDN

于 2008-10-21T11:49:18.670 回答
44

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

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

其他示例:

>>> +new Date()
1224589625406
>>> +"3"
3
>>> +true
1
>>> 3 == "3"
true
于 2008-10-21T11:47:18.707 回答
6

这是关于“一元加法”运算符的规范。希望能帮助到你...

于 2008-10-21T12:11:20.450 回答
6

JavaScript 日期可以写成字符串:

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

或作为一个数字:

1441866774938

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

谈到您的问题,它通过在赋值运算符 '=' 之后添加 '+' 来将 Date 转换为相等的数值。

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

var date = +new Date(); //same as 'var date =number(new Date());'
于 2015-09-10T06:46:36.817 回答
3

如果你还记得,当你想找到两个日期之间的时间差时,你只需执行以下操作:

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 + new Date()不会同等对待!它将被连接为字符串:

0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"
于 2018-10-16T12:07:47.663 回答
2

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

new Date().valueOf() == (+new Date)  // true
于 2016-09-18T08:40:18.400 回答
-3

它与以下内容完全相同:

function(){ 返回 0+新日期;}

与以下结果相同:

function(){ return new Date().getTime(); }
于 2008-10-21T11:48:02.557 回答