JavaScript-date-Vergleich
Warum das Gleichheits-operator false zurück, im ersten Fall?
var a = new Date(2010, 10, 10);
var b = new Date(2010, 10, 10);
alert(a == b); //<- returns false
alert(a.getTime() == b.getTime()); //returns true
Warum?
InformationsquelleAutor Art | 2010-05-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Daten sind built-in-Objekte, und nicht primitive, eine überprüfung auf Gleichheit geschieht mit Hilfe der Objekte verweist.
In diesem Fall Objekte
a
undb
sind nicht das gleiche Objekt, und so schlägt der test fehl.Sie können sehen, das gleiche mit
Mithilfe
.getTime
oder.valueOf
Sie konvertieren die Objekte Wert in eine primitive, und diese verglichen werden immer by value anstatt by reference.Wenn Sie wollen, zu tun, einen Vergleich, durch den Wert von zwei Terminen gibt es auch eine mehr verborgene Weise, dies zu tun
In diesem Fall der unären
+
Betreiber zwingt die javascript-engine zu nennen, die ObjektevalueOf
Methode - und so ist es zwei primitive Typen, die miteinander verglichen werden.Nicht sicher würde ich es nennen, ein hack ist wirklich.
Nur um sicherzugehen - ich bezog mich auf "+a == +b" - Anweisung.
Hack ist auch nützlich, weil Sie nicht brauchen, um zu überprüfen, für null-Werte (für nullable-Objekten). im Fall von .getTime, .valueOf Sie müssen auch auf null prüfen jedes date vor dem Aufruf .getTime
InformationsquelleAutor
Vergleichen Sie zwei Termine mit JavaScript
Termine.compare(a,b)
Tatsache ist, dass der Vergleich zwischen den beiden Objekten funktioniert nicht richtig :/
InformationsquelleAutor
Wenn Sie zwei Uhren, und setzen Sie beide zu der gleichen Zeit, haben Sie zwei Uhren.
Wenn Sie die Zeit ändern in einer Uhr, es wird sich nicht ändern, die Zeit in die andere Uhr.
Miteinander zu vergleichen oder zu Sortieren, Termine, subtrahieren Sie voneinander.
Die valueof ein Date-Objekt, verwendet in einem mathematischen Ausdruck, dessen Zeitstempel.
Funktion compareDates(a,b){return a-b};
InformationsquelleAutor
Tut mir Leid Jungs, aber das ist schwachsinnig... vor allem die etwas über zwei Takte.
= = per definition vergleicht die WERTE, in der Erwägung, dass === vergleicht Referenzen. Zu sagen, dass == schlägt fehl für nicht-primitive bricht die Sprache, die eigene syntaktische Struktur. Natürlich === fehlschlagen würde im ersten Beispiel, als die beiden Daten sind deutlich zwei verschiedene Zeiger auf zwei verschiedene Speicher-Bereiche, aber durch die definition der JS-spec == sollte TRUE zurückgeben, für den Vergleich von zwei Datumsangaben, dessen Wert auf den gleichen Punkt in der Zeit.
Noch ein weiterer Grund, ich hasse JS...
Sorry zu schimpfen, aber das nur gekickt meinen Hintern für eine Stunde.
Als ein beiseite, die Sie verwenden können, valueOf() erzwingen, dass der Vergleich der Werte, und die, die zurückkehren wird wahr... es ist redundant mit == aber es funktioniert.
Sie wissen nicht, was Sie schimpfen über... Die Unterscheidung zwischen == und === hat nichts zu tun mit den Werten vs refs, == einfach besagt, dass die VM soll mit einer Reihe von klar definierten Nötigung Regeln, wenn die beiden Operanden unterschiedliche Typen, während === besagt, dass kein solcher Zwang erfolgen.
InformationsquelleAutor