我在一些地方见过这种情况
function fn() {
return +new Date;
}
我可以看到它返回的是时间戳而不是日期对象,但我找不到任何关于加号是做什么的文档。
有人能解释一下吗?
我在一些地方见过这种情况
function fn() {
return +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"
其他回答
下面是关于“一元添加”操作符的规范。希望能有所帮助……
这是+一元运算符。它相当于:
function(){ return Number(new Date); }
参见http://xkr.us/articles/javascript/unary-add和MDN。
如果你还记得,当你想要找出两个日期之间的时间差时,你可以简单地这样做:
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"
它是一个一元加法运算符,也用于显式的数字转换,所以当你调用+new Date()时,它会尝试使用valueOf()来获取该对象的数值,就像我们从toString()中获取字符串一样。
new Date().valueOf() == (+new Date) // true
它所做的事情完全相同:
function(){ return 0+new Date; }
其结果与:
function(){ return new Date().getTime(); }