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


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());'


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"

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

-3

Es macht genau das Gleiche wie:

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

das hat das gleiche Ergebnis wie:

function () {neues Datum zurückgeben (). getTime (); }}

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.