大家好,javascript专家,
我遇到了这段javascript代码,它让我有点费力地理解为什么它不能像预期的那样工作。所以我想我把它贴在这里寻求你的帮助。
基本上,代码是将日期转换为毫秒格式,然后将毫秒值再次转换回日期对象,但当进行比较时,它们是否相等?
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我的问题是,为什么在火狐console.log中,即使currentTime和currentTime2的值“看起来”相同,它们的两个值也不相等?
发布于 2011-07-07 08:52:46
正如minitech指出的那样,因为从Date对象的toString方法中去掉了毫秒,所以为了绝对确保currentTime的数值等于currentTime2的数值,您需要设置currentTime2的毫秒
currentTime2.setMilliseconds(currentTime % 1000);然后,就像cwolves指出的那样,你可以比较每个Date的getTime输出。
var currentTime = new Date();
var currentTimeInMill = Date.parse(currentTime);
var currentTime2 = new Date(currentTimeInMill);
currentTime2.setMilliseconds(currentTime % 1000);
// 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.getTime() == currentTime2.getTime());发布于 2011-07-07 08:19:18
这是因为时间串不是往返的。如果你尝试这样做:
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有其他东西。这是一个以毫秒为单位的分钟差,日期字符串显然不包括这一点。
发布于 2011-07-07 08:20:44
在JavaScript中,除非两个“对象”引用完全相同的object,否则您永远不会使用它们来使它们相等。Javascript相等性先检查它们是否引用相同的对象,然后再检查是否有相似的值。
简而言之,在比较对象时,==与===是相同的
你的支票应该是:
currentTime.getTime() == currentTime2.getTime();
// or
+currentTime == +currentTime2; // cast both to numbers and compare the numbershttps://stackoverflow.com/questions/6604495
复制相似问题