加号在'+新日期'中的作用是什么

Ken*_*Ken 233 javascript syntax

我在几个地方见过这个

function fn() {
    return +new Date;
}
Run Code Online (Sandbox Code Playgroud)

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

谁能解释一下?

ken*_*ura 284

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

function(){ return Number(new Date); }
Run Code Online (Sandbox Code Playgroud)

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

在MDN中:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus

  • 几乎在任何情况下你都不应该使用它.我真的被烧了.+ new Date()除了任何类型的数学运算外,都会受到重大的性能损失.看看这个jsperf,http://jsperf.com/new-date-timing (28认同)
  • 正弦ECMAScript 5有`Date.now()`,这是以毫秒为单位获取日期和时间的首选方法. (13认同)
  • @Geuis另一个很好的理由,只因为你不能意味着你应该! (9认同)
  • 编程简洁的@BradKoch绝对不是灵魂的智慧.正如python社区已经充分说明的那样"明确总是比隐含更好".如果浏览器通过回归更改了隐含的自动类型转换,该怎么办?现在你的代码不起作用了!`.getTime()`将始终确保它. (8认同)
  • 但是为什么不在日期对象上使用定义的`getTime`方法呢?! (4认同)
  • 可以肯定的是:`+new Date()` 完全等同于 `Date.now()` -- 是吗? (2认同)

Jon*_*nan 42

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
Run Code Online (Sandbox Code Playgroud)


Pab*_*era 6

这是关于"一元添加"运算符的规范.希望能帮助到你...

  • 仅链接的答案在 SO 上不被认为有价值。这是一个很好的例子来说明原因。已经失效了 (2认同)

Dev*_*Dev 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());'
Run Code Online (Sandbox Code Playgroud)