2012-03-14 123 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

相关问题