我一直在利用JSFiddle来解决FreeCodeCamp中的这问题。当我将日期用作字符串时(即不使用"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))
isSameDay返回真。但是,当我使用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返回真。我理解案例1和案例3返回true,因为它们只是相同的字符串和相同的毫秒值。
为什么案例2返回false
发布于 2017-02-01 12:50:26
使用Date()
,只能通过调用JavaScript Date作为构造函数来实例化JavaScript日期对象:将其作为常规函数调用(即不使用新操作符)将返回字符串而不是日期对象。MDN参考。
typeof Date() //"string"
Date() == Date() //true
使用构造函数作为new Date()
,每个实例是唯一的(同一个构造函数的两个实例仍然彼此不同),这就是为什么它们在比较时不相等的原因。
typeof new Date(); //"object"
new Date() === new Date() //false
发布于 2017-02-01 12:59:13
简单地说,案例2返回false,因为是比较两个不同的对象引用(即使两个对象都包含完全相同的属性)。
而在其他情况下,您正在比较日期的toString()
值。
请参阅==
抽象平等算法的正式文档中的注3
附注3 相等运算符并不总是传递的。例如,可能有两个不同的字符串对象,每个表示相同的字符串值。 每个String对象将被==操作符视为等于String值,但两个String对象并不相等。例如: 新字符串( "a“) == "a”//true“a”==新字符串(“a”) //true 但 新字符串(“a”) ==新字符串(“a”) //false。
https://stackoverflow.com/questions/41980177
复制相似问题