今天在前台做到一个需要比较两个日期大小的地方,乍一看,发现一个比较奇怪地地方:
var t1 = new Date(2018,1,1), t2 = new Date(2018,1,1); console.log(t1); console.log(t2); console.log('t1>t2:'+(t1>t2)); console.log('t1==t2:'+(t1==t2)); console.log('t1<t2:'+(t1<t2)); console.log('t1>=t2:'+(t1>=t2)); console.log('t1<=t2:'+(t1<=t2)); // 输出结果 Thu Feb 01 2018 00:00:00 GMT+0800 (中国标准时间) Thu Feb 01 2018 00:00:00 GMT+0800 (中国标准时间) t1>t2:falset1==t2:falset1<t2:falset1>=t2:truet1<=t2:true
虽然我生命了两个相同值的时间变量,但是在比较大小的时候大小关系和想象中出入很大。接下来再来做一个试验:
var o1 = new Object(), o2 = new Object(); console.log(o1); console.log(o2); console.log('o1>o2:'+(o1>o2)); console.log('o1==o2:'+(o1==o2)); console.log('o1<o2:'+(o1<o2)); console.log('o1>=o2:'+(o1>=o2)); console.log('o1<=o2:'+(o1<=o2)); // 输出结果 {} {} o1>o2:false o1==o2:false o1<o2:false o1>=o2:true o1<=o2:true
通过对比,可以发现两种方式得出的结果非常的相似。因为在JavaScript中,datetime的类型是Object。在比较的时候,比较的不是值,而是地址,使用==和===来比较Object往往不符合预期,除非他们是来自于同一个Object,比较datetime可以先转化为String或int。
+t1 == +t2 // true