Widziałem to w kilku miejscach
function fn() {
return +new Date;
}
Widzę, że zwraca znacznik czasu, a nie obiekt daty, ale nie mogę znaleźć żadnej dokumentacji na temat tego, co robi znak plus.
Czy ktoś może wyjaśnić?
Widziałem to w kilku miejscach
function fn() {
return +new Date;
}
Widzę, że zwraca znacznik czasu, a nie obiekt daty, ale nie mogę znaleźć żadnej dokumentacji na temat tego, co robi znak plus.
Czy ktoś może wyjaśnić?
Odpowiedzi:
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
getTime
metody na obiekcie daty ?!
.getTime()
zawsze upewni się, że tak będzie.
Date.now()
, który jest preferowanym sposobem uzyskiwania daty i godziny w milisekundach.
JavaScript jest luźno wpisany, więc w pewnych okolicznościach dokonuje przymusu / konwersji typu:
http://blog.jeremymartin.name/2008/03/understanding-loose-typing-in.html
http://www.jibbering.com/faq/faq_notes/type_convert.html
Inne przykłady:
>>> +new Date()
1224589625406
>>> +"3"
3
>>> +true
1
>>> 3 == "3"
true
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());'
Oto specyfikacja dotycząca operatora „unary add”. Mam nadzieję, że to pomoże...
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"
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
Robi dokładnie to samo, co:
function () {return 0 + nowa data; }
który ma taki sam wynik jak:
function () {return new Date (). getTime (); }
new Date/1