Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript日期比较很奇怪_Javascript_Date_Datetime - Fatal编程技术网

Javascript日期比较很奇怪

Javascript日期比较很奇怪,javascript,date,datetime,Javascript,Date,Datetime,我觉得这应该是一个代码高尔夫帖子,但以下行为导致了一个奇怪的错误,表面上看是深不可测的: (a = new Date()) < (b = new Date()) a // Thu Feb 11 2016 12:24:19 GMT+0000 (GMT) b // Thu Feb 11 2016 12:24:19 GMT+0000 (GMT) a < b // false (correct) a === b // false (incorrect) <<<

我觉得这应该是一个代码高尔夫帖子,但以下行为导致了一个奇怪的错误,表面上看是深不可测的:

(a = new Date()) < (b = new Date())
a  // Thu Feb 11 2016 12:24:19 GMT+0000 (GMT)
b  // Thu Feb 11 2016 12:24:19 GMT+0000 (GMT)
a < b    // false (correct)
a === b  // false (incorrect)  <<<
a > b    // false (correct)
a <= b   // true (correct)
a >= b   // true (correct)
(a=新日期())<(b=新日期())
a//2016年2月11日星期四12:24:19 GMT+0000(GMT)
b//2016年2月11日星期四12:24:19 GMT+0000(GMT)
aa===b//false(不正确)要比较需要使用的日期,请使用
.getTime()
。因此,正确的比较应该是:

a.getTime() === b.getTime() //true
a.getTime() > b.getTime()   //false
...

除了
==
一个比较之外,所有的比较都将日期强制为数字(它们的时间值,从历元开始的毫秒数),然后比较这些数字。
=
比较正在检查
a
b
是否引用同一对象。(
==
也会这样做。)

时间(在您的示例中)完全相同,但仍然有两个不同的对象。这就是你看到的结果

注:

// Create two Date instances, check if a's time value is less than b's
// (probably not, but it's just feasible this could cross a millisecond
// threshold)
(a = new Date()) < (b = new Date())

// Show the value of a and b
a  // Thu Feb 11 2016 12:24:19 GMT+0000 (GMT)
b  // Thu Feb 11 2016 12:24:19 GMT+0000 (GMT)

// See if a's time value is less than b's
a < b    // false

// See if a and b refer to the same object (they don't)
a === b  // false

// See if a's time value is greater than b's
a > b    // false

// See if a's time value is less than or equal to b's
a <= b   // true

// See if a's time value is greater than or equal to b's
a >= b  
请注意,如果时间完全相同,
+a===+b
(或
+a==+b
,或-非常棘手-
+a==b
a==+b
)都是真的,因为我们将比较时间值

为了好玩,这里有一个例子,我们知道基本时间值完全相同:

var a、b;
var now=Date.now();//=+新日期();在旧浏览器上
显示(“创建并比较:”,(a=新日期(现在))<(b=新日期(现在)),“a的时间不是+b:”,+a>+b,“a的时间不是>b的”);
显示(“a>b:,a>b,“a的时间不是>b的”);
显示(“+a=b:”,a>=b,“a的时间等于b的时间”);
函数显示(前缀、结果、原因){
var msg=前缀+结果+”,“+因为;
var pre=document.createElement('pre');

pre.innerHTML=msg.replace(/&/g,“&;”).replace(/
a
a.getTime()
+a
这是因为日期相等:
new date().getTime()==new date().getTime()是
true
getTime()
确实是这里提到的正确方法:@Mark-
a.getTime()
a
相同。两者都比较时间值。这可能是因为
=
比较与
日期相关联的原始数字,而
==
检查对象是否相等?可能是@Hacketo的重复,但这不是原因true@Hacketo这些是字符串,不是对象。比较原语和对象是不同的是,“这在哪里有文档记录”,您需要查看涉及的运算符的算法,即
的抽象关系比较、
=
的抽象等式比较和
==
的严格等式比较。
(a = new Date()) < (b = new Date())
a  // Thu Feb 11 2016 12:24:19 GMT+0000 (GMT)
b  // Thu Feb 11 2016 12:24:19 GMT+0000 (GMT)
+a < +b    // false
a === b    // false
+a > +b    // false
+a <= +b   // true
+a >= +b