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?
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
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
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());'
Voici le spécification en ce qui concerne l'opérateur "unary add". J'espère que ça aide...
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"
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