Ale*_*son 3 javascript equality date
我一直在乱搞JSFiddle来解决FreeCodeCamp中的这个问题.当我使用Date作为字符串时(即没有"new"):
情况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))
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
isSameDay返回true.我理解案例1和案例3返回true,因为它们只是相同的字符串和相同的毫秒值.
为什么案例2返回false?
使用时Date()
,只能通过调用JavaScript Date作为构造函数来实例化JavaScript Date对象:将其作为常规函数(即没有new运算符)调用将返回字符串而不是Date对象.MDN参考.
typeof Date() //"string"
Date() == Date() //true
Run Code Online (Sandbox Code Playgroud)
使用构造函数作为new Date()
,每个实例都是唯一的(相同构造函数的两个实例仍然彼此不同),这就是它们在比较时不相等的原因.
typeof new Date(); //"object"
new Date() === new Date() //false
Run Code Online (Sandbox Code Playgroud)