MDN mówi, że valueOf i getTime są funkcjonalnie równoważne. Dlaczego dwie funkcje robią to samo?W JavaScript dlaczego obiekty Date mają obie metody valueOf i getTime, jeśli robią to samo?
Odpowiedz
Metoda Date.prototype.getTime
zwraca liczbę milisekund od epoki (1970-01-01T00: 00: 00Z); jest unikalny dla typu Date i ważnej metody.
Urządzenie Object.prototype.valueOf
method służy do uzyskania "wartości pierwotnej" dowolnego obiektu. W przypadku klasy Date wygodnie jest użyć atrybutu "time" (wartość zwrócona przez getTime()
) jako jego prymitywną formę, ponieważ jest to zwykła reprezentacja dat. Ponadto pozwala używać operatorów arytmetycznych na obiektach z datami, dzięki czemu można je porównać za pomocą operatorów porównania (<
, <=
, >
, itp.).
var d = new Date();
d.getTime(); // => 1331759119227
d.valueOf(); // => 1331759119227
+d; // => 1331759119227 (implicitly calls "valueOf")
var d2 = new Date();
(d < d2); // => true (d came before d2)
Zauważ, że można wdrożyć „valueOf” metodę dla własnych typów robić ciekawe rzeczy:
function Person(name, age) {this.name=name; this.age=age;}
Person.prototype.valueOf = function() {return this.age; }
var youngster = new Person('Jimmy', 12);
var oldtimer = new Person('Hank', 73);
(youngster < oldtimer); // => true
youngster + oldtimer; // => 85
valueOf
to metoda wszystkich obiektów. Obiekty mogą zastąpić to, czego chcą.
Ma to sens, jeśli weźmiemy pod uwagę, że getTime został wprowadzony w JavaScript 1.0, a valueOf został wprowadzony w JavaScript 1.1. Domyślam się, że getTime został zachowany dla zapewnienia zgodności wstecznej. – kahoon
Nie ma różnicy w zachowaniu między tymi dwoma funkcjami:
https://code.google.com/p/v8/codesearch#v8/trunk/src/date.js&q=ValueOf&sq=package:v8&l=361
// ECMA 262 - 15.9.5.8
function DateValueOf() {
return UTC_DATE_VALUE(this);
}
// ECMA 262 - 15.9.5.9
function DateGetTime() {
return UTC_DATE_VALUE(this);
}
Ale są różnice historyczne .
- 1. new Data (..). GetTime() nie jest równy momentowi (..). ValueOf() w chwiliJS?
- 2. JavaScript i to samo źródło iframes
- 3. Dlaczego metody nie mają równości odniesienia?
- 4. Java - dlaczego klasy System i Runtime mają identyczne metody?
- 5. Android: Dlaczego getDimension i getDimensionPixelSize oba zwracają to samo?
- 6. Dlaczego parseInt ostrzec korzystania valueOf
- 7. Dlaczego eax daje zero, jeśli zawiera samo?
- 8. Dlaczego pakiety Freezables są już zamrożone i mają pustego Dispatchera (to samo ze stylami), gdy są przechowywane w Application.Resources?
- 9. Xcode 5 przedstawia to samo urządzenie dwukrotnie
- 10. Dlaczego obiekty utworzone w pętli mają ten sam adres?
- 11. jQuery $ (function() {}) i $ (document) .ready to samo?
- 12. czas mysql i czas php nie to samo
- 13. javascript date + 1
- 14. Dlaczego metody ruby mają zakres leksykalny?
- 15. Dlaczego metody unittest2 to camelCase, jeśli preferowane są names_with_underscores?
- 16. Jquery "jeśli to i jeśli to", zrób to
- 17. Jeśli javascript "(nowa data()). GetTime()" jest uruchamiana z 2 różnych stref czasowych
- 18. Co odziedziczy! : robią to ścieżki wyszukiwania?
- 19. nowa data(). GetTime() w .NET
- 20. Czy Tuple2 i Pair to samo, czy nie?
- 21. Metody LINQ to metody rozszerzeń?
- 22. Literały JSON i obiekty JavaScript. Jestem zdezorientowany
- 23. Obiekty JSP, JavaScript i Java
- 24. Dlaczego czasami bitmapy to te same obiekty?
- 25. Co robią operatorzy kodu JavaScript?
- 26. Zastępowanie valueof() i toString() w enum Java
- 27. Wiadomości Autobusy i MOM - to samo?
- 28. Jak można wdrożyć wiele klas, które mają te same metody, które robią różne rzeczy?
- 29. Czy sesja i ciasteczka to samo?
- 30. Wdrażanie Porównywalne, porównawcze zderzenie nazw: "mają to samo wymazanie, ale żaden nie zastępuje innego"
Należy pamiętać, że '+ d' to nie to samo co' 0 + d'. Ten ostatni konwertuje datę na ciąg. – user502144
Jestem pewna, że jest to znakomicie dobra odpowiedź, ale wciąż jest dla mnie trochę niewyraźna. Czy byłbyś w stanie trochę rozwinąć? Jestem zdezorientowany przez "uzyskać" typ pierwotny "" i "czas ... jak to jest" prymitywna forma "". Jak to jest rozróżnienie między 'getTime()' i 'valueOf()'? A więc, co oznacza "skalowana" reprezentacja? Dziękuję Ci. – Karl
@Karl, jedynym celem 'getTime()' jest zwrócenie liczby milisekund od północy 01 stycznia, 1970 UTC. Natomiast "valueOf()" zwraca pojedynczą wartość - może to być łańcuch, liczba, ale nie klasa obiektu - stąd typ prymitywny. Coś, co może być użyte do porównań, numeryczne przedstawienie. Sądzę, że projektanci języków myśleli, że można już użyć 'getTime()' w tym celu i po prostu go użyli. Mogło być inaczej, ale dla wygody użyli 'getTime()'. –