有人可以建议一种方法来比较使用JavaScript大于,小于和过去的两个日期的值吗?值将来自文本框.
当我创建两个相同的JavaScript Date对象然后比较它们时,它们似乎不相等.如何测试两个JavaScript日期是否具有相同的值?
var date1 = new Date('Mon Mar 11 2013 00:00:00');
var date2 = new Date('Mon Mar 11 2013 00:00:00');
console.log(date1 == date2); //false?
Run Code Online (Sandbox Code Playgroud)
这里似乎是共同的认识之间的不匹配==,它实际上做什么.为此问题提供一些背景知识:
typeof new Number(1); // returns object
typeof new String(1); // returns object
typeof 1; // returns number
Run Code Online (Sandbox Code Playgroud)
看似,这两个Number和String是的object类型.这并不奇怪.然而==,true当操作数相等而不管它们的类型时,事情会变得有趣.
根据一个有点权威的说明:
运算符尝试使用对象的valueOf和toString方法将对象转换为原始值,String或Number值.如果此转换对象的尝试失败,则会生成运行时错误.
简而言之,==应该按原始值比较对象.出奇:
var numa = new Number(1);
var numb = new Number(1);
var stri = new String(1);
numa.toString() == stri.toString(); // returns true, as expected
numa.valueOf() == stri.valueOf(); // returns true, as expected
numa == stri; // returns …Run Code Online (Sandbox Code Playgroud) 我一直在乱搞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() …Run Code Online (Sandbox Code Playgroud)