J'ai vu ça à quelques endroits
function fn() {
return +new Date;
}
Et je peux voir qu'il retourne 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?
J'ai vu ça à quelques endroits
function fn() {
return +new Date;
}
Et je peux voir qu'il retourne 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?
Réponses:
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
getTime
méthode définie sur l'objet date?!
.getTime()
s'assurera toujours qu'il le fasse.
Date.now()
, qui est le moyen préféré pour obtenir la date et l'heure en millisecondes.
JavaScript est typé de manière lâche, il effectue donc une coercition / conversion 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
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());'
Voici la spécification concernant l'opérateur "unary add". J'espère que ça aide...
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"
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
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 (); }
new Date/1