MDN表示valueOf和getTime在功能上等同。为什么有两个功能可以做同样的事情?在Javascript中,为什么Date对象同时具有valueOf和getTime方法?
24
A
回答
32
Date.prototype.getTime
方法返回自纪元(1970-01-01T00:00:00Z)以来的毫秒数;它对日期类型和重要方法是唯一的。
Object.prototype.valueOf
method用于获取任何对象的“原始值”。对于Date类,使用“time”属性(由getTime()
返回的值)作为其基本形式很方便,因为它是日期的常见表示形式。此外,它允许您在日期对象上使用算术运算符,因此您可以使用比较运算符(<
,<=
,>
等)进行比较。
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)
注意,你可以实现你自己的类型“的valueOf”的方法做有趣的事情:
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
3
9
有这两个功能之间的行为没有什么区别:
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);
}
但是有历史的差异。
相关问题
- 1. 迭代javascript对象和valueOf toString方法
- 2. 为什么new Date()。getTime()在javascript中返回太多“0”
- 3. 这些Date对象为什么不同?
- 4. 在Java中,为什么Date()对象的printf有时会出错?
- 5. Date对象和UTC方法
- 6. 为什么在这行代码中乘以0.002:new Date()。getTime()* 0.002;
- 7. 在不同对象中使用valueOf方法
- 8. 在joda.time.LocalDate中,getTime()是Date中的方法的等价物是什么?
- 9. 为什么JavaScript的Date对象在Firefox中无效?
- 10. 为什么BigDecimal中没有重载的valueOf方法?
- 11. 为什么同一对象的不同方法具有相同的`id`?
- 12. 为什么在DOM对象具有.toString()方法
- 13. 有没有什么办法,使12小时模式Date对象的JavaScript
- 14. 为什么Javascript的Date(timestamp)和Python的datetime.fromtimestamp(timestamp)有所不同?
- 15. 为什么在JavaScript中存在具有相同名称的全局方法时总是调用私有方法?
- 16. 为什么document.write()和alert()方法呈现JavaScript对象的方式不同?
- 17. Java泛型方法和方法对象作为参数有什么不同?
- 18. 为什么javascript getTime()不是函数?
- 19. 为什么Date.parse不返回Date对象?
- 20. 对象[对象对象]没有方法'可拖动'为什么?
- 21. 为什么数组中的对象没有对象方法?
- 22. 有没有什么方法可以将Ember对象转换为纯javascript对象?
- 23. 为什么js从具有特定格式的Date对象中减去一天?
- 24. 有没有什么办法在JavaScript中将大对象转换为小对象?
- 25. 如何从JavaScript中的Date()。getTime()中创建倒计时?
- 26. 如何保持在不同的时区Date对象中的JavaScript
- 27. Java - 为什么System和Runtime类具有相同的方法?
- 28. 为什么这两个JavaScript Date对象不一样?
- 29. 方法同步vs对象同步有什么不同?
- 30. 为什么UIEvent在touchesBegan和touchesMoved中有不同的对象?
请注意,'+ d'与'0 + d'不一样。后者将Date转换为String。 – user502144 2012-09-01 18:02:06
我相信这是一个非常好的答案,但对我来说仍然有点模糊。你能稍微详细一点吗?我被“获取'原始类型'”和“时间......因为它是'原始形式'”所迷惑。 getTime()'和'valueOf()'之间的区别如何?此外,“缩放”表示的含义是什么?谢谢。 – Karl 2012-11-18 19:16:55
@Karl,'getTime()'的唯一目的是返回1970年1月1日午夜以来的毫秒数。而'valueOf()'返回一个单一的值 - 它可能是一个字符串,一个数字而不是一个对象类 - 因此是原始类型。一些可能用于比较的数字表示。我猜想语言设计者认为你已经可以使用'getTime()'来达到这个目的,并且只是用它。它可能有不同的实现,但为了方便起见,它们使用'getTime()'。 – 2014-01-20 09:28:34