2012-03-14 10 views

Respuesta

32

El método Date.prototype.getTime devuelve el número de milisegundos desde la época (1970-01-01T00: 00: 00Z); es exclusivo del tipo Fecha y un método importante.

El Object.prototype.valueOf method se utiliza para obtener el "valor primitivo" de cualquier objeto. Para la clase Date, es conveniente usar el atributo "time" (el valor devuelto por getTime()) como su forma primitiva ya que es una representación común para las fechas. Además, le permite usar operadores aritméticos en objetos de fecha para que pueda compararlos simplemente usando operadores de comparación (<, <=, >, etc.).

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) 

Tenga en cuenta que se podría aplicar el método "valueOf" para sus propios tipos para hacer cosas interesantes:

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

Tenga en cuenta que '+ d' no es lo mismo que' 0 + d'. Este último convierte Date to String. – user502144

+0

Estoy seguro de que esta es una respuesta muy buena, pero todavía es un poco confusa para mí. ¿Podrías elaborar un poco? Estoy confundido por "obtener el 'tipo primitivo'" y "tiempo ... ya que es 'forma primitiva'". ¿Cómo es esto una distinción entre 'getTime()' y 'valueOf()'? Además, ¿qué se entiende por representación "escalada"? Gracias. – Karl

+2

@Karl, el único propósito de 'getTime()' es devolver el número de milisegundos desde la medianoche del 1 de enero de 1970 UTC. Mientras que 'valueOf()' devuelve un valor único, puede ser una cadena, un número pero no una clase de objeto, por lo tanto, tipo primitivo. Algo que podría usarse para comparaciones, una representación numérica. Supongo que los diseñadores de idiomas pensaron que ya puedes usar 'getTime()' para ese fin y que simplemente lo usaron. Podría haber sido implementado de manera diferente, pero por conveniencia usaron 'getTime()'. –

3

valueOf es un método de todos los objetos. Los objetos son libres de anular esto para que sea lo que quieren.

+7

Esto tiene sentido si tenemos en cuenta que getTime se introdujo en JavaScript 1.0 y valueOf se introdujo en JavaScript 1.1. Mi suposición es que getTime se mantuvo para la compatibilidad hacia atrás. – kahoon

Cuestiones relacionadas