我在一些地方见过这种情况

function fn() {
    return +new Date;
}

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

有人能解释一下吗?


当前回答

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

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

其他回答

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

它所做的事情完全相同:

function(){ return 0+new Date; }

其结果与:

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

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

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

参见http://xkr.us/articles/javascript/unary-add和MDN。

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

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

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