molily: Fehler beim Vergleichen von Datumswerten?

Beitrag lesen

Hallo,

Im Chrome Debugger hab ich folgende Variablen und Werte stehen:

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

Beim Ausgeben auf der Konsole wird implizit die Methode toString() des Objektes aufgerufen. Nur deshalb bekommst du diese menschenlesbare Repräsentation des Objekts. toString ist auf Date-Objekten so definiert, dass etwas sinnvolles und nicht nur der Default "[object Object]" herauskommt.

Wenn ich this.date1() == this.date2() abfrage, erhalte ich FALSE.

Das liegt daran, wie der Vergleichsoperator intern funktioniert. Insbesondere in dem Fall, wo keine Primitives (String, Number, Boolean…), sondern Objects verglichen werden (vollwertige Objekte).

Wenn beide Operanden vom Typ Object sind, so wird verglichen, ob es sich um *dasselbe* Objekt handelt:

»1. If Type(x) is the same as Type(y), then …
f.  Return true if x and y refer to the same object. Otherwise, return false.«

Es wird also nicht die Gleichheit der Objekte ermittelt (z.B. durch Vergleichen sämtlicher Eigenschaften), sondern lediglich die Identität geprüft (d.h. ob die beiden Objekte identisch sind, also auf dieselbe Speicherstelle verweisen).

Ein Objekt ist nie mit einem anderen identisch, nur mit sich selbst (das bedeutet ja Identität ;)).

var a = { prop: 1 };  
var b = { prop: 1 };  
alert(a == b); // false

Grüße,
Mathias