сравнивая объекты даты в as2 - PullRequest
0 голосов
/ 06 января 2010

Я, должно быть, что-то упустил.

date1 = new Date(2010, 01, 10, 12, 10, 30, 000);
date2 = new Date(2010, 01, 10, 12, 10, 30, 000);

trace(date1 == date2); // returns false

Тем не менее,

date1 = new Date(2010, 01, 10, 12, 10, 30, 000);
date2 = new Date(2010, 01, 10, 12, 10, 30, 000);

trace(date1.toString() == date2.toString()); // returns true

Так ... что происходит? Очевидно, что два объекта даты немного отличаются друг от друга, и эта разница почему-то упускается из виду, когда они анализируются как строки, но насколько они различаются?

1 Ответ

2 голосов
/ 06 января 2010

Когда вы сравниваете два таких объекта, на самом деле вы сравниваете их идентичность на более низком уровне с их позициями в ОЗУ. Когда вы делаете new Date(), это создает новый объект, поэтому два объекта не будут совпадать, даже если сохраненные в нем значения соответствуют.

Сравнение строк, однако, является особым случаем, когда строки сравниваются посимвольно, а не сравнивают их позиции в памяти.

Распространенным способом сравнения дат является использование их свойства time, которое представляет собой число, представляющее объект Date как время UNIX, т. Е. Секунды с начала эпохи UNIX в 1970-01-01 00:00:00.

trace(date1.time == date2.time); // traces "true"

Приветствия

...