Was macht das Pluszeichen in '+ neues Datum'?

Antworten:

294

Das ist der unäre Operator +, er entspricht:

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

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

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

Kentaromiura
quelle
4
Aber warum würden Sie die definierte getTimeMethode nicht für das Datumsobjekt verwenden?!
Tkone
30
Unter fast keinen Umständen sollten Sie dies tatsächlich verwenden. Ich habe mich wirklich verbrannt. + neues Datum () zusätzlich zu jeder Art von mathematischen Operationen wird eine erhebliche Leistungseinbuße erleiden. Schauen Sie sich diese jsperf, jsperf.com/new-date-timing
Geuis
9
@BradKoch in der Programmier Kürze ist sicherlich nicht der Witz der Seele. Wie die Python-Community es so angemessen ausgedrückt hat: "Explizit ist immer besser als implizit." Was ist, wenn ein Browser die dort implizierte automatische Typkonvertierung durch eine Regression geändert hat? Jetzt funktioniert Ihr Code einfach nicht mehr! .getTime()wird immer versichern, dass es tut.
Tkone
11
@Geuis ein weiterer hervorragender Grund, dass nur weil Sie können, nicht bedeutet, dass Sie sollten!
Tkone
14
Sinus ECMAScript 5 gibt es Date.now(), was der bevorzugte Weg ist, um Datum und Uhrzeit in Millisekunden zu erhalten.
Cutemachine
6

Ein JavaScript-Datum kann als Zeichenfolge geschrieben werden:

Do 10.09.2015 12:02:54 GMT + 0530 (IST)

oder als Nummer:

1441866774938

Als Zahlen geschriebene Daten geben die Anzahl der Millisekunden seit dem 1. Januar 1970, 00:00:00 an.

Wenn Sie zu Ihrer Frage kommen, wird durch Hinzufügen von '+' nach dem Zuweisungsoperator '=' das Datum in einen Wert mit gleicher Zahl konvertiert.

Gleiches kann mit der Funktion Number () erreicht werden, wie Number (new Date ()).

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

Hier ist die Spezifikation bezüglich des Operators "unary add". Ich hoffe es hilft...

Pablo Cabrera
quelle
3

Nur um ein paar Infos zu geben:

Wenn Sie sich erinnern: Wenn Sie den Zeitunterschied zwischen zwei Datumsangaben ermitteln möchten, gehen Sie einfach wie folgt vor:

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"

Wenn Sie nun den Typ von d1-0 überprüfen, ist dies auch eine Zahl:

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

das + konvertiert auch das Datum in eine Zahl:

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

Aber beachten Sie, dass 0 + new Date()wird nicht in ähnlicher Weise behandelt werden! Es wird als Zeichenfolge verkettet:

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

Es ist ein unärer Add- Operator und wird auch für die explizite Zahlenkonvertierung verwendet. Wenn Sie also aufrufen +new Date(), wird versucht, den numerischen Wert dieses Objekts mithilfe von valueOf()Zeichenfolgen abzurufentoString()

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

Es macht genau das Gleiche wie:

function () {return 0 + neues Datum; }}

das hat das gleiche Ergebnis wie:

function () {neues Datum zurückgeben (). getTime (); }}
Sergey Ilinsky
quelle
11
Nein am 0 + neues Datum. Das konvertiert zuerst das Datum in eine Zeichenfolge und stellt dann eine "0" voran (z. B.: "0Tue Oct 21 2008 20:38:05 GMT-0400");
Chris Noe
2
1 * neues Datum wird, aber 1 + neues Datum -> String
Kent Fredric
ya, auch das gleiche gilt fürnew Date/1
Ashish