2010-01-05 98 views
0

我必須缺少一些東西。比較as2中的日期對象

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 

所以......這是怎麼回事?很顯然,這兩個日期對象在某種程度上有微妙的不同,當它們被解析爲字符串時,這種差異會被忽略,但是它們有什麼不同?

回答

2

當你比較這樣的兩個對象時,你真正比較的是他們的對象身份,在較低的級別上,他們在RAM中的位置。當您執行new Date()時,會創建一個新對象,因此這兩個對象即使存儲在其中的值也不匹配。

比較字符串是一種特殊情況,字符串按字符進行比較而不是比較它們在內存中的位置。

比較日期的常用方法是使用它們的time屬性,該屬性是表示Date對象作爲UNIX時間的數字,即自1970-01-01 00:00:00開始UNIX紀元以來的秒數。

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

乾杯

+1

瘋狂 - 我猜我原以爲那種比較的前提是你使用「===」操作發生了 - 這「==」比較值,「===」比較實際獨特的變量本身。但不是很多,嗯?很高興知道,謝謝! – 2010-01-05 21:56:49

+1

'=='和'==='操作符是相同的(除了字符串,我認爲,即使它們可以被實現)。 Flash運行時不支持重載平等,所以'=='總是參考比較。 – 2010-01-06 08:33:29