【发布时间】:2017-06-18 05:21:51
【问题描述】:
我一直在用 JSFiddle 来解决 FreeCodeCamp 中的this 问题。当我使用 Date 作为字符串时(即没有“新”):
案例一:
function isSameDay (dtFrom, dtTo) {
return dtFrom == dtTo
}
let today = Date()
let tomorrow = Date()
console.log(today)
console.log(tomorrow)
console.log(isSameDay(today, tomorrow))
isSameDay 返回 true。但是,当我使用 Date 作为构造函数时(使用“new”):
案例 2:
function isSameDay (dtFrom, dtTo) {
return dtFrom == dtTo
}
let today = new Date()
let tomorrow = new Date()
console.log(today)
console.log(tomorrow)
console.log(isSameDay(today, tomorrow))
isSameDay 返回 false。但是(!),当我添加一元运算符“+”时:
案例 3:
function isSameDay (dtFrom, dtTo) {
return dtFrom == dtTo
}
let today = + new Date()
let tomorrow = + new Date()
console.log(today)
console.log(tomorrow)
console.log(isSameDay(today, tomorrow))
isSameDay 返回 true。我理解案例 1 和案例 3 返回 true,因为它们只是相同的字符串和相同的毫秒值。
为什么案例 2 返回 false?
【问题讨论】:
-
同一个构造函数的两个实例仍然彼此不同,即使它们具有完全相同的属性,因为它们是不同的对象。如果要比较日期,请将它们转换为毫秒并计算该整数。此外,sicne new Date() 返回当前时间戳,两次 new Date() 调用之间可能存在毫秒差异。
-
因为甚至没有
({}) == ({})...但Date()返回一个字符串,所以它会==大部分时间...除非秒计时 -
cast them to miliseconds... 但时不时地new Date().getTime() == new Date().getTime()是错误的 ... 因为在两次调用 new Date() 之间可能有一毫秒的时间间隔 ... @987654329 不太可能@ - 因为它是一个分辨率为 1 秒的字符串......但仍然很少是错误的 -
您除以准确度,或者减去并计算它们之间的时间,具体取决于您是在比较小时、分钟还是秒或其他什么。与使用 Date 方法或生成的字符串相比,转换为毫秒的关键在于能够使用“简单”的数学运算而不用担心本地化。
-
感谢您的回复,我不知道 ({}) != ({})。如果这是一个重复的问题,我们深表歉意。
标签: javascript date equality