MDN dice que valueOf y getTime son funcionalmente equivalentes. ¿Por qué tienen dos funciones que hacen exactamente lo mismo?En Javascript, ¿por qué los objetos Date tienen los métodos valueOf y getTime si hacen lo mismo?
Respuesta
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
valueOf
es un método de todos los objetos. Los objetos son libres de anular esto para que sea lo que quieren.
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
No hay diferencia en el comportamiento entre esas dos funciones:
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);
}
Pero hay diferencias históricas .
- 1. ¿Por qué los botones tienen oyentes de acción y los comandos no lo hacen en LWUIT?
- 2. ¿Por qué los literales de los números no tienen acceso a los métodos numéricos?
- 3. ¿Por qué las clases internas hacen accesibles los métodos privados?
- 4. ¿Qué hacen los operadores '& =' y '= &'?
- 5. Javascript, getTime()
- 6. Por qué los métodos de interfaz no tienen cuerpo
- 7. ¿Por qué los métodos ruby no tienen alcance léxico?
- 8. ¿Qué hacen los probadores?
- 9. lo que es invalidante, los métodos de actualización lo hacen en VC++
- 10. System.currentTimeMillis (vs) new Date() vs. Calendar.getInstance(). GetTime()
- 11. ¿Por qué todos buscamos si (auto) en los métodos init?
- 12. Si javascript "(new Date()). GetTime()" se ejecuta desde 2 diferentes zonas horarias
- 13. ¿Por qué JSON.stringify() acepta objetos Date?
- 14. ¿Por qué los métodos auxiliares se usan frecuentemente en Javascript?
- 15. Rails to_json: métodos que tienen los parámetros
- 16. ¿Cómo se recolectan los objetos anónimos en JavaScript?
- 17. ¿Por qué los métodos parciales no son públicos si la implementación está en el mismo conjunto?
- 18. ¿Qué paquetes hacen un buen uso de los objetos S4?
- 19. Debajo del capó, ¿los objetos de Javascript tienen tablas hash?
- 20. Vea si dos objetos tienen el mismo tipo
- 21. sólo lo hacen si el archivo por lotes días ...
- 22. ¿Por qué los funtores de C++ son preferibles a los objetos con métodos con nombre?
- 23. ¿Por qué los objetos flotantes en Python no tienen un atributo de denominador, mientras que int lo hace?
- 24. ¿Por qué javascript getTime() no es una función?
- 25. JavaScript: Diferencia entre los métodos toString() y toLocaleString() de Fecha
- 26. ¿Por qué se usan los signos de admiración en los métodos de Ruby?
- 27. Cómo incluir varios archivos Javascript en .NET (como lo hacen en los rieles)
- 28. ¿Por qué tienen todos los métodos/variables estáticos en una clase no estática?
- 29. javascript Fecha(). GetTime() no es una función
- 30. ¿Qué hacen los comandos f y t en Vim?
Tenga en cuenta que '+ d' no es lo mismo que' 0 + d'. Este último convierte Date to String. – user502144
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
@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()'. –