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