В JavaScript, почему объекты Date имеют методы valueOf и getTime, если они делают то же самое? - PullRequest
31 голосов
/ 15 марта 2012

MDN говорит, что valueOf и getTime функционально эквивалентны. Почему две функции выполняют одно и то же?

Ответы [ 3 ]

40 голосов
/ 15 марта 2012

Метод Date.prototype.getTime возвращает количество миллисекунд с начала эпохи (1970-01-01T00: 00: 00Z); он уникален для типа Date и важного метода.

Метод Object.prototype.valueOf используется для получения «примитивного значения» любого объекта. Для класса Date удобно использовать атрибут «время» (значение, возвращаемое 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
10 голосов
/ 10 октября 2013

Нет различий в поведении между этими двумя функциями:

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);
}

Но есть исторические различия.

4 голосов
/ 15 марта 2012

valueOf - метод всех объектов.Объекты могут переопределить это, чтобы быть тем, что они хотят.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...