代码之家  ›  专栏  ›  技术社区  ›  Ken

加号在“+新日期”中起什么作用

  •  215
  • Ken  · 技术社区  · 17 年前

    我在几年前就见过这种情况 places

    function fn() {
        return +new Date;
    }
    

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

    有人能解释一下吗?

    7 回复  |  直到 8 年前
        1
  •  308
  •   dovid    10 年前
        2
  •  44
  •   Jonny Buchanan    17 年前

    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
  •  7
  •   Henry norway whale    8 年前

    specification 关于“一元加法”运算符。希望对你有帮助。。。

        4
  •  6
  •   Dev    10 年前

    JavaScript日期可以写为字符串:

    或作为一个数字:

    以数字形式写入的日期,指定自1970年1月1日00:00:00以来的毫秒数。

    对于您的问题,在赋值运算符“=”之后添加“+”,将日期转换为相等的数值。

    同样可以使用Number()函数实现,比如Number(newdate());

    var date = +new Date(); //same as 'var date =number(new Date());'
    
        5
  •  3
  •   S.Serpooshan    7 年前

    只是想提供更多信息:

    如果你还记得,当你想找出两个日期之间的时差时,你只需做以下事情;

    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"
    
        6
  •  2
  •   Raghavendra    9 年前

    这是一个 运算符,还用于显式数字转换,因此在调用 +new Date() valueOf() 就像我们从你那里得到的线一样 toString()

    new Date().valueOf() == (+new Date)  // true
    
        7
  •  -3
  •   Sergey Ilinsky    17 年前

    function(){ return 0+new Date; }
    

    其结果与:

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