angular.equals如何评估无效的日期对象?

时间:2015-06-03 20:10:31

标签: javascript angularjs validation date

我知道我不应该使用无效的日期对象来相互比较,但是为了理解angular.equal如何以及为什么处理像

这样的事情。
angular.equals(new Date(''), new Date('')); //returns false, both objects are null
另一方面

angular.equals(null, null); //returns true

我在这里缺少什么? JSfiddle 如果您认为有必要

1 个答案:

答案 0 :(得分:2)

如果您使用angular< 1.2.x,您将看到该行为。因为.equals实现仅检查p1.getTime()p2.getTime()的相等性,在这种情况下NaNNaN不是NaN。但是1.2.x以后已经改变,因为在.equals上再次进行了递归检查,并且存在一个条件:

 if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN

在这种情况下,您会看到值返回true。

>=1.2.x

  else if (isDate(o1)) {
    if (!isDate(o2)) return false;
    return equals(o1.getTime(), o2.getTime()); //returns false
  }

<1.2.x

 else if (isDate(o1)) {
    return isDate(o2) && o1.getTime() == o2.getTime(); //returns true
  }