In Javascript why do Date objects have both valueOf and getTime methods if they do the same?

JavascriptDate

Javascript Problem Overview


MDN says that valueOf and getTime are functionally equivalent. Why have two functions that do the very same thing?

Javascript Solutions


Solution 1 - Javascript

The Date.prototype.getTime method returns the number of milliseconds since the epoch (1970-01-01T00:00:00Z); it is unique to the Date type and an important method.

The Object.prototype.valueOf method is used to get the "primitive value" of any object and is used by the language internally when it needs to convert an object to a primitive. For the Date class, it is convenient to use the "time" attribute (the value returned by getTime()) as its primitive form since it is a common representation for dates. Moreover, it lets you use arithmetic operators on date objects so you can compare them simply by using comparison operators (<, <=, >, 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)

Note that you could implement the "valueOf" method for your own types to do interesting things:

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

Solution 2 - Javascript

There are no difference in behaviour between those two functions:

v8 Source Code on tag 4.8.47 in /src/date.js:

// ECMA 262 - 15.9.5.8
function DateValueOf() {
  CHECK_DATE(this);
  return UTC_DATE_VALUE(this);
}
// ECMA 262 - 15.9.5.9
function DateGetTime() {
  CHECK_DATE(this);
  return UTC_DATE_VALUE(this);
}

But there are historical differences.

Solution 3 - Javascript

valueOf is a method of all objects. Objects are free to override this to be what they want.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAttila KunView Question on Stackoverflow
Solution 1 - JavascriptmaericsView Answer on Stackoverflow
Solution 2 - JavascriptcsikosjanosView Answer on Stackoverflow
Solution 3 - JavascriptRocket HazmatView Answer on Stackoverflow