Сравнение даты JavaScript

Почему оператор равенства возвращает false в первом случае?

var a = new Date(2010, 10, 10);
var b = new Date(2010, 10, 10);
alert(a == b); // <- returns false
alert(a.getTime() == b.getTime()); // returns true

Почему?

11
задан Peter Mortensen 23 June 2010 в 17:28
поделиться

3 ответа

Поскольку даты являются встроенными объектами, а не примитивами , проверка равенства выполняется с использованием ссылок на объекты.

В этом случае объекты a и b не являются одним и тем же объектом, и поэтому тест не проходит.
Вы можете увидеть то же самое, используя

var a = new String("a");
var b = new String("a");
alert(a == b); //false

Используя .getTime или .valueOf , вы конвертируете значение объекта в примитив, и они всегда сравниваются по значению, а не по ссылке.

Если вы хотите выполнить сравнение по значению двух дат, существует также более неясный способ сделать это

var a = new Date(2010, 10, 10);
var b = new Date(2010, 10, 10);

alert(+a == +b); //true

В этом случае унарный оператор + заставляет механизм javascript вызывать объекты valueOf , поэтому сравниваются два примитива.

28
ответ дан 3 December 2019 в 03:34
поделиться

Если вы создадите два часа и установите их на одно и то же время, у вас будет два часа.

Если вы измените время в одних часах, время в других часах не изменится.

Чтобы сравнить или отсортировать даты, вычтите одно из другого. Значением объекта Date, используемого в математическом выражении, является его временная метка.

function compareDates (a, b) {return a-b};

0
ответ дан 3 December 2019 в 03:34
поделиться

Сравните две даты с помощью JavaScript

date.compare (a, b)

Дело в том, что сравнение двух объектов не работает должным образом: /

0
ответ дан 3 December 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: