MDN afferma che valueOf e getTime sono funzionalmente equivalenti. Perché due funzioni fanno la stessa cosa?In Javascript perché gli oggetti Date hanno entrambi i metodi valueOf e getTime se fanno lo stesso?
In Javascript perché gli oggetti Date hanno entrambi i metodi valueOf e getTime se fanno lo stesso?
risposta
Il metodo Date.prototype.getTime
restituisce il numero di millisecondi dall'epoca (1970-01-01T00: 00: 00Z); è unico per il tipo di data e un metodo importante.
Il Object.prototype.valueOf
method viene utilizzato per ottenere il "valore primitivo" di qualsiasi oggetto. Per la classe Date, è conveniente utilizzare l'attributo "time" (il valore restituito da getTime()
) come sua forma primitiva poiché è una rappresentazione comune per le date. Inoltre, consente di utilizzare operatori aritmetici sugli oggetti data in modo da poterli confrontare semplicemente utilizzando operatori di confronto (<
, <=
, >
, ecc.).
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)
Si noti che è possibile implementare il metodo "valueOf" per i propri tipi di fare cose interessanti:
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
è un metodo di tutti gli oggetti. Gli oggetti sono liberi di scavalcare questo per essere ciò che vogliono.
Questo ha senso se consideriamo che getTime è stato introdotto in JavaScript 1.0 e valueOf è stato introdotto in JavaScript 1.1. La mia ipotesi è che getTime sia stato mantenuto per la retrocompatibilità. – kahoon
Non ci sono differenze di comportamento tra queste due funzioni:
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);
}
Ma ci sono differenze storiche .
- 1. new Date (..). GetTime() non è uguale al momento (..). ValueOf() in momentJS?
- 2. Perché i diversi metodi dello stesso oggetto hanno lo stesso `id`?
- 3. Perché due nuovi oggetti non hanno lo stesso codice hash?
- 4. Vedere se due oggetti hanno lo stesso tipo
- 5. javascript Date(). GetTime() non è una funzione
- 6. Differenza tra System.currentTimeMillis() e Date getTime()?
- 7. Perché gli oggetti creati in un loop hanno lo stesso indirizzo?
- 8. Perché i letterali numerici non hanno accesso ai metodi numerici?
- 9. perché entrambi trasformano e mappano i metodi in scala?
- 10. Javascript, getTime()
- 11. new Date(). GetTime() in .NET
- 12. Perché entrambi i param e i costruttori di oggetti muti?
- 13. Cosa fanno gli oggetti finestra (window.something = qualcosa) in JavaScript?
- 14. Perché i compressori js non lo fanno?
- 15. I client memcache di lingue diverse hanno lo stesso hash?
- 16. Se javascript "(new Date()). GetTime()" viene eseguito da 2 fusi orari diversi
- 17. vedere se due file hanno lo stesso contenuto in pitone
- 18. I processori Intel e AMD hanno lo stesso assemblatore?
- 19. I metodi SetUp e TearDown richiedono [RequiresSTA] se i test lo hanno?
- 20. valueOf() vs. toString() in Javascript
- 21. Come vengono raccolti gli oggetti anonimi raccolti in Javascript?
- 22. In Lucene, perché i miei documenti potenziati e non caricati hanno lo stesso punteggio?
- 23. Perché tutti gli oggetti Java hanno wait() e notify() e ciò provoca un calo di prestazioni?
- 24. Perché utilizzare gli handler mentre runOnUiThread fa lo stesso?
- 25. Gli oggetti modello hanno interfacce?
- 26. controlla se tutti gli elementi di una matrice hanno lo stesso valore in Swift
- 27. new Date(). GetTime() non restituisce timestamp in millisecondi
- 28. Perché devo mantenere entrambi gli oggetti se Indirizzo è annidato in Utente?
- 29. Cosa succede se due diverse annotazioni hanno lo stesso nome?
- 30. Verificare se due hash hanno lo stesso set di chiavi
Ricorda che '+ d' non è lo stesso di' 0 + d'. Quest'ultimo converte Data in stringa. – user502144
Sono sicuro che questa è una buona risposta, ma è ancora un po 'confusa per me. Saresti in grado di elaborare un po '? Sono confuso da "ottenere il 'tipo primitivo'" e "il tempo ... in quanto è 'forma primitiva'". Come è questa una distinzione tra 'getTime()' e 'valueOf()'? Inoltre, cosa si intende per rappresentazione "scalata"? Grazie. – Karl
@Karl, l'unico scopo di 'getTime()' è di restituire il numero di millisecondi dalla mezzanotte del 01 gennaio 1970 UTC. Mentre 'valueOf()' restituisce un singolo valore - potrebbe essere una stringa, un numero ma non una classe di oggetti - quindi un tipo primitivo. Qualcosa che potrebbe essere usato per i confronti, una rappresentazione numerica. Suppongo che i progettisti linguistici abbiano pensato che si possa già usare 'getTime()' per quello scopo e lo si è appena usato. Potrebbe essere stato implementato in modo diverso ma per comodità hanno usato 'getTime()'. –