Co robi znak plus w „+ nowa data”


Odpowiedzi:


294

to jest operator jednoargumentowy, jest to równoważne z:

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

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

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


4
Ale dlaczego nie miałbyś użyć zdefiniowanej getTimemetody na obiekcie daty ?!
tkone

30
Prawie pod żadnym pozorem nie powinieneś tego używać. Właśnie się na tym poparzyłem. + nowa data () oprócz wszelkiego rodzaju operacji matematycznych zostanie poważnie zagrożona. Spójrz na to jsperf, jsperf.com/new-date-timing
Geuis

9
@BradKoch w programowaniu zwięzłości z pewnością nie jest dowcipem duszy. Jak ujęła to społeczność python, „jawne jest zawsze lepsze niż niejawne”. Co jeśli przeglądarka zmieni automatyczną konwersję typu, która jest tam sugerowana poprzez regresję? Teraz twój kod po prostu nie działa! .getTime()zawsze upewni się, że tak będzie.
tkone

11
@Geuis to kolejny doskonały powód, dla którego to, że nie możesz, nie oznacza, że ​​powinieneś!
tkone

14
Istnieje sinus ECMAScript 5 Date.now(), który jest preferowanym sposobem uzyskiwania daty i godziny w milisekundach.
cutemachine


6

Data JavaScript może być zapisana jako ciąg:

Czw 10 września 2015 12:02:54 GMT + 0530 (IST)

lub jako liczba:

1441866774938

Daty zapisane jako liczby określają liczbę milisekund od 1 stycznia 1970 r., 00:00:00.

W odpowiedzi na twoje pytanie wydaje się, że dodając „+” po operatorze przypisania „=”, konwertuje Data na wartość równą liczbie.

to samo można osiągnąć za pomocą funkcji Number (), na przykład Number (new Date ());

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


3

Aby podać więcej informacji:

Jeśli pamiętasz, gdy chcesz znaleźć różnicę czasu między dwiema datami, po prostu wykonaj następujące czynności;

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"

teraz, jeśli zaznaczysz typ d1-0, jest to również liczba:

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

ten + przekształci również datę na liczbę:

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

Ale uwaga, że 0 + new Date()będzie nie być traktowane podobnie! będzie konkatenowany jako ciąg:

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

1

Jest to jednoargumentowy operator dodawania , który jest również używany do jawnej konwersji liczb, więc kiedy wywołujesz +new Date(), próbuje uzyskać wartość liczbową tego obiektu przy użyciu, valueOf()tak jak otrzymujemy ciąg ztoString()

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

-3

Robi dokładnie to samo, co:

function () {return 0 + nowa data; }

który ma taki sam wynik jak:

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

11
Nie w dniu 0 + nowa data. To najpierw konwertuje datę na ciąg, a następnie wstawia „0”, (np .: „0Tue Oct 21 2008 20:38:05 GMT-0400”);
Chris Noe

2
1 * nowa data będzie, ale 1 + nowa data -> Ciąg
Kent Fredric

tak, to samo dotyczynew Date/1
Ashish
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.