Worf: Fehler beim Vergleichen von Datumswerten?

Beitrag lesen

Hallo,

Ich lass mir einreden, dass ich mit == Objekte vergleiche, aber ich hab es dann auch mal mit unterschiedlichen Datumswerten funktioniert, und siehe da, es klappt tadellos (einmal 9 Uhr, einmal 10 Uhr):

this.date1(): Fri Oct 25 2013 09:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)
this.date2(): Fri Oct 25 2013 10:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)

this.date1() < this.date2(): true
this.date1() == this.date2(): false
this.date1() > this.date2(): false

molily hat ja bereits erläutert, wieso das Ergebnis beim Gleichheitsoperator dieses Verhalten zeigt.

Beim Verwenden der Grösser-als- und Kleiner-als-Operatoren wird - abweichend vom Gleichheits-Operator - zuerst die "valueOf"-Funktion des Date-Objekts aufgerufen, und dieser Wert zum Vergleichen verwendet:

  
console.clear();  
  
d1 = new Date();  
d2 = new Date();  
  
// Funktion, um Aufrufe der "valueOf"-Funktion anzuzeigen  
function dumpValueOf(name) {  
    // "valueOf"-Funktion vom Prototype aufrufen und ausführen  
    console.log(name+".valueOf: "+Date.prototype.valueOf.call(this));  
    return Date.prototype.valueOf.call(this);  
}  
  
// Eigene valueOf-Funktion für diese Instanz verwenden  
d1.valueOf = function() {  
    return dumpValueOf.call(d1,"d1");  
};  
  
// Eigene valueOf-Funktion für diese Instanz verwenden  
d2.valueOf = function() {  
    return dumpValueOf.call(d2,"d2");  
};  
  
console.log("d1 == d2: ", (d1 == d2));  // false, kein Aufruf der Funktion valueOf  
console.log("d1 > d2: ");  
(d1 < d2); // Aufruf der Funktion valueOf  
console.log("d1 < d2: ");  
(d1 < d2); // Aufruf der Funktion valueOf  

Gruss,
Worf