Art*_*Art 11 javascript datetime
为什么在第一种情况下,相等运算符返回false?
var a = new Date(2010, 10, 10);
var b = new Date(2010, 10, 10);
alert(a == b); // <- returns false
alert(a.getTime() == b.getTime()); // returns true
Run Code Online (Sandbox Code Playgroud)
为什么?
Sea*_*sey 28
由于日期是内置对象而不是基元,因此使用对象引用进行相等性检查.
在这种情况下,对象a和b不是同一个对象,因此测试失败.
你可以看到相同的使用
var a = new String("a");
var b = new String("a");
alert(a == b); //false
Run Code Online (Sandbox Code Playgroud)
通过使用.getTime或.valueOf您将对象值转换为基元,并且始终按值而不是通过引用进行比较.
如果你想通过两个日期的值进行比较,那么还有一种更为模糊的方法
var a = new Date(2010, 10, 10);
var b = new Date(2010, 10, 10);
alert(+a == +b); //true
Run Code Online (Sandbox Code Playgroud)
在这种情况下,一元运算+符强制javascript引擎调用objects valueOf方法 - 因此它是两个被比较的基元.