Che cosa fa il segno più in "+ nuova data"


Risposte:


294

questo è l'operatore + unario, equivale a:

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

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

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


4
Ma come mai non dovresti usare il getTimemetodo definito sull'oggetto data ?!
dal

30
In quasi nessuna circostanza dovresti effettivamente usarlo. Mi sono davvero bruciato per questo. + nuova data () in aggiunta a qualsiasi tipo di operazioni matematiche subirà una penalità per le prestazioni. Guarda questo jsperf, jsperf.com/new-date-timing
Geuis,

9
@BradKoch nella brevità della programmazione non è certamente lo spirito dell'anima. Come la comunità di Python ha affermato in modo adeguato "esplicito è sempre meglio di implicito". Che cosa succede se un browser modifica la conversione automatica del tipo che è implicita lì attraverso una regressione? Ora il tuo codice non funziona! .getTime()lo assicurerò sempre.
tkone,

11
@Geuis un'altra eccellente ragione che solo perché puoi non significa che dovresti!
tkone,

14
Sine ECMAScript 5 esiste Date.now(), che è il modo preferito per ottenere la data e l'ora in millisecondi.
cutemachine,


6

Una data JavaScript può essere scritta come una stringa:

Gio 10 Set 2015 12:02:54 GMT + 0530 (IST)

o come numero:

1441866774938

Date scritte come numeri, specifica il numero di millisecondi dal 1 ° gennaio 1970 alle 00:00:00.

Venendo alla tua domanda, giunge che aggiungendo '+' dopo l'operatore di assegnazione '=', convertendo la Data in uguale valore numerico.

lo stesso può essere ottenuto utilizzando la funzione Number (), come Number (new Date ());

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


3

Solo per dare qualche informazione in più:

Se ricordi, quando vuoi trovare la differenza di orario tra due Date, fai semplicemente come segue;

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"

ora se controlli il tipo di d1-0, è anche un numero:

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

quel + convertirà anche la data in numero:

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

Ma nota che 0 + new Date()sarà non essere trattati allo stesso modo! sarà concatenato come stringa:

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

1

È un operatore di aggiunta unario e utilizzato anche per la conversione +new Date()numerica esplicita, quindi quando chiami , cerca di ottenere il valore numerico di quell'oggetto usando valueOf()come otteniamo la stringa datoString()

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

-3

Fa esattamente la stessa cosa di:

function () {return 0 + new Date; }

che ha lo stesso risultato di:

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

11
No su 0 + nuova data. Che prima converte la data in una stringa e quindi antepone uno "0", (ad esempio: "0Tue 21 ott 2008 20:38:05 GMT-0400");
Chris Noe,

2
1 * nuova data sarà, ma 1 + nuova data -> stringa
Kent Fredric

ya, anche lo stesso vale pernew Date/1
Ashish
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.