2012-03-14 44 views

回答

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

請注意,'+ d'與'0 + d'不一樣。後者將Date轉換爲String。 – user502144 2012-09-01 18:02:06

+0

我相信這是一個非常好的答案,但對我來說仍然有點模糊。你能稍微詳細一點嗎?我被「獲取'原始類型'」和「時間......因爲它是'原始形式'」所迷惑。 getTime()'和'valueOf()'之間的區別如何?此外,「縮放」表示的含義是什麼?謝謝。 – Karl 2012-11-18 19:16:55

+2

@Karl,'getTime()'的唯一目的是返回1970年1月1日午夜以來的毫秒數。而'valueOf()'返回一個單一的值 - 它可能是一個字符串,一個數字而不是一個對象類 - 因此是原始類型。一些可能用於比較的數字表示。我猜想語言設計者認爲你已經可以使用'getTime()'來達到這個目的,並且只是用它。它可能有不同的實現,但爲了方便起見,它們使用'getTime()'。 – 2014-01-20 09:28:34

3

valueOf是所有對象的一種方法。對象可以自由地將其重寫爲他們想要的。

+7

如果我們考慮在JavaScript 1.0中引入getTime並在JavaScript 1.1中引入valueOf,這是有道理的。我的猜測是getTime保持向後兼容性。 – kahoon 2012-03-14 21:03:41

相關問題