web-dev-qa-db-fra.com

Que fait le signe plus dans '+ nouvelle date'

J'ai vu cela dans quelques endroits

function fn() {
    return +new Date;
}

Et je peux voir qu'il renvoie un horodatage plutôt qu'un objet de date, mais je ne trouve aucune documentation sur ce que fait le signe plus.

Quelqu'un peut-il expliquer?

229
Ken

c'est l'opérateur + unaire, c'est équivalent à:

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

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

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

279
kentaromiura

JavaScript est typé de manière approximative, il effectue donc une conversion/coercition de type dans certaines circonstances:

http://blog.jeremymartin.name/2008/03/understanding-loose-typing-in.html
http://www.jibbering.com/faq/faq_notes/type_convert.html

Autres exemples:

>>> +new Date()
1224589625406
>>> +"3"
3
>>> +true
1
>>> 3 == "3"
true
41
Jonny Buchanan

Une date JavaScript peut être écrite sous forme de chaîne:

Jeu 10 Sep 2015 12:02:54 GMT + 0530 (IST)

ou sous forme de numéro:

1441866774938

Les dates écrites en chiffres spécifient le nombre de millisecondes depuis le 1er janvier 1970 à 00:00:00.

En répondant à votre question, il semblerait qu’en ajoutant '+' après l’opérateur d’attribution '=', nous convertissions Date en un nombre égal.

on peut faire la même chose avec la fonction Number (), comme Number (new Date ());

var date = +new Date(); //same as 'var date =number(new Date());'
6
Dev

Voici le spécification en ce qui concerne l'opérateur "unary add". J'espère que ça aide...

5
Pablo Cabrera

Juste pour donner plus d’informations:

Si vous vous en souvenez, lorsque vous voulez trouver la différence de temps entre deux dates, procédez comme suit:

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"

maintenant, si vous cochez le type de d1-0, c’est aussi un numéro:

t = new Date() - 0; //numeric value of Date: number of msec's since 1 Jan 1970.
typeof t; // "number"

que + convertira également la date en nombre:

typeof (+new Date()) //"number"

Mais notez que 0 + new Date() sera pas traité de la même manière! il sera concaténé en chaîne:

0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"
2
S.Serpooshan

Il s’agit d’un opérateur add unary, également utilisé pour la conversion de nombre explicite. Ainsi, lorsque vous appelez +new Date(), il essaie d’obtenir la valeur numérique de cet objet en utilisant valueOf() comme nous obtenons une chaîne de toString()

new Date().valueOf() == (+new Date)  // true
1
Raghavendra