2012-03-14 10 views

risposta

32

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 
+2

Ricorda che '+ d' non è lo stesso di' 0 + d'. Quest'ultimo converte Data in stringa. – user502144

+0

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

+2

@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()'. –

3

valueOf è un metodo di tutti gli oggetti. Gli oggetti sono liberi di scavalcare questo per essere ciò che vogliono.

+7

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

Problemi correlati