Da date sono incorporati negli oggetti, e non primitives, viene eseguito un controllo di uguaglianza utilizzando i riferimenti agli oggetti.
In questo caso, gli oggetti a
e b
non sono lo stesso oggetto e pertanto il test ha esito negativo.
si può vedere la stessa utilizzando
var a = new String("a");
var b = new String("a");
alert(a == b); //false
Utilizzando .getTime
o .valueOf
si sta convertendo il valore degli oggetti in un primitivo, e questi sono sempre rispetto per valore piuttosto che per riferimento.
Se si vuole fare un confronto con il valore di due date c'è anche un modo più oscura per fare questo
var a = new Date(2010, 10, 10);
var b = new Date(2010, 10, 10);
alert(+a == +b); //true
In questo caso l'+
operatore unario costringe il motore JavaScript di chiamare gli oggetti valueOf
metodo - e quindi sono due primitive che vengono confrontate.
fonte
2010-05-22 16:29:04
Questo è un trucco interessante, grazie! – Art
Non sono sicuro che lo chiamerei davvero un hack. –
Solo per essere sicuro - mi riferivo a "+ a == + b". – Art