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