Que fait le signe plus dans '+ nouvelle date'

Réponses:

294

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

kentaromiura
la source
4
Mais comme pourquoi n'utilisez-vous pas la getTimeméthode définie sur l'objet date?!
tkone
30
Vous ne devez en aucun cas l'utiliser. Je me suis vraiment brûlé dessus. + la nouvelle date () en plus de tout type d'opérations mathématiques subira une pénalité de performance majeure. Regardez ce jsperf, jsperf.com/new-date-timing
Geuis
9
@BradKoch dans la brièveté de la programmation n'est certainement pas l'esprit de l'âme. Comme la communauté python l'a si bien dit, "explicite vaut toujours mieux qu'implicite". Que se passe-t-il si un navigateur modifie la conversion de type automatique qui y est impliquée lors d'une régression? Maintenant, votre code ne fonctionne tout simplement pas! .getTime()s'assurera toujours qu'il le fasse.
tkone
11
@Geu est une autre excellente raison pour laquelle ce n'est pas parce que vous pouvez!
tkone
14
Il existe Sine ECMAScript 5 Date.now(), qui est le moyen préféré pour obtenir la date et l'heure en millisecondes.
cutemachine
6

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

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

ou sous forme de nombre:

1441866774938

Les dates écrites sous forme de nombres, spécifient le nombre de millisecondes depuis le 1er janvier 1970, 00:00:00.

En venant à votre question, il semble qu'en ajoutant «+» après l'opérateur d'affectation «=», la conversion de Date en valeur numérique égale.

la même chose peut être obtenue en utilisant la fonction Number (), comme Number (new Date ());

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

Voici la spécification concernant l'opérateur "unary add". J'espère que ça aide...

Pablo Cabrera
la source
3

Juste pour donner plus d'informations:

Si vous vous souvenez, lorsque vous voulez trouver le décalage horaire entre deux dates, vous faites simplement ce qui 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 nombre:

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

ce + convertira également la date en nombre:

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

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

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

Il s'agit d'un opérateur d'ajout unaire et également utilisé pour la conversion explicite des nombres, donc lorsque vous appelez +new Date(), il essaie d'obtenir la valeur numérique de cet objet en utilisant valueOf()comme nous obtenons la chaîne detoString()

new Date().valueOf() == (+new Date)  // true
Raghavendra
la source
-3

Cela fait exactement la même chose que:

function () {return 0 + new Date; }

cela a le même résultat que:

function () {return new Date (). getTime (); }
Sergey Ilinsky
la source
11
Non à 0 + nouvelle date. Cela convertit d'abord la date en une chaîne, puis ajoute un "0", (par exemple: "0Tue 21 Oct 2008 20:38:05 GMT-0400");
Chris Noe
2
1 * nouvelle date, mais 1 + nouvelle date -> String
Kent Fredric
ya, il en va de même pournew Date/1
Ashish