Przypisanie Date
zmiennej do innej spowoduje skopiowanie odwołania do tego samego wystąpienia. Oznacza to, że zmiana jednego zmieni drugie.
Jak mogę faktycznie sklonować lub skopiować Date
instancję?
javascript
Árvíztűrő tükörfúrógép
źródło
źródło
Date.prototype.clone = function() { return new Date(this.getTime()); };
którego można następnie użyć jakocopiedDate = date.clone();
copiedDate = new Date(date)
Podejście działa w IE6 +. W przeglądarce Firefox dwie opcje mają tę samą prędkość.new Date(date)
to samonew Date(date.getTime())
, ponieważ JS spróbuje zadzwonić,date.valueOf()
gdy będzie potrzebować numeru, idate.valueOf()
jest taki sam jakdate.getTime()
odnośnik Date.valueOf Object.valueOfnew Date(date)
, używajnew Date(date.getTime()
lubnew Date(date.valueOf)
zamiast tego, ponieważ pierwszy sposób może prowadzić do różnic między datami przynajmniej w przeglądarce Firefox i IE (nie w Chrome). Na przykład używanietoISOString()
w obu datach w przeglądarce Firefox generuje"2015-04-21T04:56:42.000Z"
i"2015-04-21T04:56:42.337Z"
.To jest najczystsze podejście
źródło
źródło
+
robi każdemu oprócz ekspertów JS.+
znak jest tutaj nierealnym operatorem. Oznacza tonew Date( Number(orig))
. Więcej tutaj: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Wersja uproszczona:
źródło
const cloneDate = d => new Date(d.getTime())
.Dowiedziałem się, że to proste przypisanie działa również:
Ale nie wiem, jak to jest „bezpieczne”. Pomyślnie przetestowany w IE7 i Chrome 19.
źródło
new Date(date)
, używajnew Date(date.getTime()
lubnew Date(date.valueOf)
zamiast tego, ponieważ pierwszy sposób może prowadzić do różnic między datami przynajmniej w przeglądarce Firefox i IE (nie w Chrome). Na przykład używanietoISOString()
w obu datach w przeglądarce Firefox generuje"2015-04-21T04:56:42.000Z"
i"2015-04-21T04:56:42.337Z"
.