我知道我不应该使用无效的日期对象来相互比较,但是为了理解angular.equal如何以及为什么处理像
这样的事情。angular.equals(new Date(''), new Date('')); //returns false, both objects are null
另一方面
angular.equals(null, null); //returns true
我在这里缺少什么? JSfiddle 如果您认为有必要
答案 0 :(得分:2)
如果您使用angular< 1.2.x,您将看到该行为。因为.equals
实现仅检查p1.getTime()
和p2.getTime()
的相等性,在这种情况下NaN
和NaN
不是NaN
。但是1.2.x以后已经改变,因为在.equals
上再次进行了递归检查,并且存在一个条件:
if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN
在这种情况下,您会看到值返回true。
else if (isDate(o1)) {
if (!isDate(o2)) return false;
return equals(o1.getTime(), o2.getTime()); //returns false
}
else if (isDate(o1)) {
return isDate(o2) && o1.getTime() == o2.getTime(); //returns true
}