大家好,所有javascript大师,
我遇到过这个javascript代码让我难以理解为什么它没有按预期工作。所以我想在这里发帖寻求你的帮助。
基本上代码是将Date转换为毫秒格式,然后将该毫秒值再次转换回Date对象,但在比较时,它们不相等?
var currentTime = new Date();
var currentTimeInMill = Date.parse(currentTime);
var currentTime2 = new Date(currentTimeInMill);
// debug in firefox
console.log(currentTime);
// Date {Thu Jul 07 2011 09:56:19 GMT+1000 (AUS Eastern Standard Time)}
console.log(currentTime2);
// Date {Thu Jul 07 2011 09:56:19 GMT+1000 (AUS Eastern Standard Time)}
console.log(currentTime == currentTime2);
// false
我的问题是为什么2值currentTime和currentTime2不相等,即使它们的值在Firefox console.log中“看起来”相同?
答案 0 :(得分:3)
这是因为时间字符串不是往返的。如果你试试这个:
var currentTime = new Date();
var currentTimeInMill = Date.parse(currentTime);
var currentTime2 = new Date(currentTimeInMill);
console.log(currentTime.getTime());
console.log(currentTime2.getTime());
console.log(currentTime == currentTime2);
// false
你会看到时代不同。 currentTime2
以3个零结尾,而currentTime
则有其他内容。这是一个微小的差异,以毫秒为单位,字符串显然不包括。
答案 1 :(得分:3)
除非他们引用 完全相同的对象 ,否则您不会使用==
让JavaScript中的两个“对象”相等。 Javascript相等性检查它们是否在检查相同的对象之前是否引用相同的对象。
简单地说,比较对象==
与===
您的支票应该是:
currentTime.getTime() == currentTime2.getTime();
// or
+currentTime == +currentTime2; // cast both to numbers and compare the numbers
答案 2 :(得分:1)
因为,正如minitech指出的那样,从Date对象的toString
方法中剥离毫秒,以便绝对确保currentTime
的数值等于currentTime2
的数值,我需要设置currentTime2
:
currentTime2.setMilliseconds(currentTime % 1000);
然后,正如cwolves指出的那样,您可以比较每个Date
的{{1}}输出。所以完成后,它看起来像这样:
getTime
答案 3 :(得分:0)
currentTime-currentTime2 === 0是测试两个日期引用相同时间戳的快速方法。