Я возился с JSFiddle для решения проблемы this в FreeCodeCamp. При использовании в качестве даты строки (то есть, нет "новой"):Почему (new Date() == new Date()) false, но (Date() == Date()) истинно?
Случай 1:
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 возвращает истинную. Однако, когда я использую Дата в качестве конструктора (с "новой"):
Случай 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 возвращает ложные. Тем не менее, когда я добавить унарный оператор "+" (!):
Случай 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 возвращает истинную. Я понимаю, что случай 1 и случай 3 возвращают true, потому что они являются одними и теми же строками и теми же значениями миллисекунды.
Почему случай 2 возвращается false?
два экземпляра одного и того же конструктора по-прежнему отличаются от друг друга, даже если они имеют те же свойства, так как они являются различными объектами. Если вы хотите сравнить даты, добавьте их в miliseconds и добавьте целое число. Кроме того, sicne new Date() возвращает текущую временную метку, может существовать разница в milisecond между двумя новыми вызовами Date(). – Shilly
, потому что даже '({}) == ({})' ... но 'Date()' возвращает строку, поэтому она будет == большую часть времени ... за исключением того, что секундные метки превышают –
' бросать их в miliseconds' ... но время от времени 'new Date(). getTime() == new Date(). getTime()' false ... потому что миллисекунда может переключаться между двумя вызовами на новый Date() ... менее вероятно с 'Date() == Date()' - потому что это строка с 1-секундным разрешением ... но все равно может быть неверно –