【发布时间】:2010-09-18 07:17:37
【问题描述】:
我在几个places看到过这个
function fn() {
return +new Date;
}
我可以看到它返回的是时间戳而不是日期对象,但我找不到任何关于加号在做什么的文档。
谁能解释一下?
【问题讨论】:
标签: javascript syntax
我在几个places看到过这个
function fn() {
return +new Date;
}
我可以看到它返回的是时间戳而不是日期对象,但我找不到任何关于加号在做什么的文档。
谁能解释一下?
【问题讨论】:
标签: javascript syntax
那是+一元运算符,相当于:
function(){ return Number(new Date); }
【讨论】:
getTime 方法呢?!
.getTime() 将始终确保它确实如此。
Date.now(),这是获取日期和时间(以毫秒为单位)的首选方式。
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
【讨论】:
这里是关于“一元加法”运算符的specification。希望对你有帮助...
【讨论】:
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"
【讨论】:
它是一个一元加法运算符,也用于显式数字转换,所以当你调用+new Date()时,它会尝试使用valueOf()获取该对象的数值,就像我们得到字符串一样来自toString()
new Date().valueOf() == (+new Date) // true
【讨论】:
它的作用完全一样:
function(){ 返回 0+新日期; }与以下结果相同:
function(){ return new Date().getTime(); }【讨论】:
new Date/1也一样