2015-06-03 47 views
2

我知道我不應該使用無效的日期對象相互比較,但對於瞭解如何以及爲什麼angular.equal目的處理類似angular.equals如何評估無效的日期對象?

angular.equals(new Date(''), new Date('')); //returns false, both objects are null 

,另一方面

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

我在這裏錯過了什麼? JSfiddle如果您覺得需要

回答

2

如果您使用的角度爲< 1.2.x,您將看到該行爲。因爲.equals實現只檢查p1.getTime()p2.getTime()的等同性,在這種情況下,它是NaNNaN不是NaN。但1.2.x版本起已經改變,因爲是一個遞歸檢查再次在.equals,有一個條件:

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

,你會看到在這種情況下返回真值。

>=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 
    }