'+new Date' 中的加号有什么作用

IT技术 javascript syntax
2021-01-31 22:10:19

我在几个地方看到过这个

function fn() {
    return +new Date;
}

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

谁能解释一下?

6个回答

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

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

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

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

@BradKoch 编程简洁肯定不是灵魂的智慧。正如 python 社区所说的那样,“显式总是比隐式好”。如果浏览器通过回归改变了那里隐含的自动类型转换怎么办?现在您的代码不起作用!.getTime()将始终确保它确实如此。
2021-03-11 22:10:19
有正弦 ECMAScript 5 Date.now(),这是获取以毫秒为单位的日期和时间的首选方法。
2021-03-17 22:10:19
但是就像为什么不在getTime日期对象上使用定义的方法一样?!
2021-04-01 22:10:19
@Geuis 另一个很好的理由,仅仅因为你可以并不意味着你应该!
2021-04-05 22:10:19
在几乎任何情况下,您都不应该实际使用它。我真的被这件事烧死了。+new Date() 除了任何类型的数学运算都会受到重大的性能损失。看看这个jsperf,jsperf.com/new-date-timing
2021-04-07 22:10:19

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
>>> 3 === "3" 假
2021-03-30 22:10:19

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

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());'

只是提供更多信息:

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

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"