2012-03-06 12 views
40

new Date() przyjmuje liczbę porządkową i zwraca obiekt Date.
Co robi Date() i jak to działa w innym czasie?Data i nowa data w kodzie JavaScript

>>> new Date(1329429600000) 
Date {Fri Feb 17 2012 00:00:00 GMT+0200 (القدس Standard Time)} 
>>> Date(1329429600000) 
"Tue Mar 06 2012 15:29:58 GMT+0200 (Jerusalem Standard Time)" 

Odpowiedz

86

Z specs:

Kiedy Date nazywany jest jako funkcja raczej niż jako konstruktor, zwraca łańcuch znaków reprezentujący bieżący czas (UTC).

oraz:

Kiedy Date nazywany jest jako część wyrażenia new, to konstruktor: to inicjuje nowo utworzony obiekt.

Więc new Date(...) zwraca obiekt taki, że obj instanceof Date jest prawdziwe, natomiast Date(...) w zasadzie takie same jak zwraca new Date().toString().

+0

Najlepsza odpowiedź na razie: –

+1

każdy pseudokod kodu jak zaimplementowano funkcję Date(), aby mogła działać zarówno jako konstruktor, jak i zwykła funkcja? dzięki – Benny

+2

@Benny przestrzegaj następujących zasad: 'function Test() { var private =" wartość prywatna "; this.public = "wartość publiczna"; "Zwróć wartość" return; } ' Wywołanie" new Test() "tworzy obiekt z wartościami prywatnymi i publicznymi. Wywołanie 'Test()' zwraca ciąg znaków. – musicin3d

18

new Date tworzy nowy obiekt Date, który można modyfikować lub zainicjować z innym terminie podczas Date zwraca ciąg bieżącego datę/czas, ignorując swoje argumenty.

+3

W rzeczywistości zwraca ciąg znaków, a nie obiekt Date, ale jest to poprawne: działa tak, ponieważ działa w następujący sposób :-) – Pointy

+0

Dzięki, zmienił moją odpowiedź. – xato

2

new Date() zwraca datę na podstawie parametru wejściowego, a Date() zwraca dzisiejszą datę w przeglądarce.

2

Data umożliwia tworzenie obiektów reprezentujących datę/godzinę. To NIE ma być nazwane jak funkcja. Więcej informacji znajdziesz tutaj: Date - MDN

5

Aby uzyskać szybkie odwołanie do interfejsu API i łóżko testowe kodu, należy zapoznać się z artykułem JavaScript Date. Możesz zobaczyć, że funkcja Date() nazywa się bez new nie pobiera żadnych parametrów i zawsze zwraca string reprezentację bieżącej daty/czasu. Jeśli modyfikować próbki do:

console.log(Date()); 
console.log(Date(1329429600000)); 

Znajdziesz wyników dla obu są takie same (ponieważ JavaScript ignoruje dodatkowe argumenty przekazywane do funkcji):

Wed Apr 11 2012 09:58:11 GMT-0700 (PDT) 
Wed Apr 11 2012 09:58:11 GMT-0700 (PDT) 
0

Wywołanie konstruktora jako funkcji jest całkiem nie w porządku, że zrobi (prawdopodobnie) nieoczekiwane rzeczy z zakresu aplikacji i przed bardzo długo będziesz koncentrować uwagę w sesji naprawiania błędów grupowych.

Utwórz obiekt daty zgodnie z zamierzeniami projektantów specyfikacji, nie koduj obejść zaimplementowanych jako zabezpieczenia przez inżynierów, którzy uważają, że programiści JS są głupi. (pracował w laboratorium, był na następnym krześle podczas rozmowy, zajmował się nim i przeniósł się)

Jeśli jesteś szaleńczo przeciwko nowemu możesz spróbować object.create, ale w momencie pisania jest wolniej i jeśli nie planujesz do dziedziczenia polimorficznego, to dodatkowy wysiłek za mniejszą nagrodę.

1

Date klasy można nazwać jako konstruktora lub metody mieć wbudowany w kodzie jak:

function Date(args){ 
    if (this.constructor == Date){ 
     // if you call : new Date(args) 
    }else{ 
     // if you call as method : Date() 
     return new Date() 
    } 

} 

Tak więc, jeśli nazywa się go jak metody, to ponownie wywołać konstruktora Zwróć aktualną datę: & czas.

+1

Interesujące, ale zauważ, że 'typeof Date() === 'string'', a nie'' object''. –

0

Jest rok 2017 i miałem na myśli to samo pytanie. Co znalazłem jako odpowiedź po pewnym przeczytaniu:

"Najprostszym sposobem wykonania konwersji typu jawnego jest użycie funkcji Boolean(), Number(), String() lub Object(). widziałem te funkcje jako konstruktorów obiektów opakowujących, ale gdy są wywoływane bez nowego operatora, działają jako funkcje konwersji i konwersje typu. "

" Wbudowane klasy rdzenia JavaScript próbują konwersji valueOf() przed Konwersja toString(), z wyjątkiem klasy Date, , która wykonuje konwersję toString(). "

Tak Data() wywoływana bez nowego słowa kluczowego wykonuje konwersję typu. A ponieważ Date jest obiektem i obiekt powinien być ustawiony, obiekty date domyślnie wywołują metodęString() (chociaż Date ma również sensowną metodę valueOf()).

Znaleziono to w książce "JavaScript: The Definitive Guide". Pozostawiając go tutaj dla przyszłych pokoleń, którzy dopiero zaczęli się uczyć JS :)