Warning: Creating default object from empty value in /srv/kunden/webs/cmsagenten/blog.it-agenten.com/wp-content/themes/skeptical/functions/admin-hooks.php on line 160

+(new Date()) vs. Date.now()

Zufällig hing ich kürzlich in #meteor (auf Freenode) rum, als jemand eine Frage angesprochen hat, die ich mir auch schon gestellt habe: Wo liegen genau die Unterschiede zwischen den Javascript-Anweisungen +(new Date()) und Date.now()?
uhr

Wahrscheinlich genauso aus Zufall war eines der ersten Dinge, die ich bezüglich der Programmierung in Javascript gelernt hab, dass man besser die Date.now() Variante benutzt, weil die nicht erst ein Objekt erstellt, sondern sofort die Anzahl der vergangenen Millisekunden seit Anbeginn der Zeit zurück gibt (Nerd-Talk für den 1. Januar 1970).

Dementsprechend ist “Date.now()” wesentlich schneller als “new Date()”, in Firefox 15 auf meinem System zum Beispiel um den Faktor 5 (hier eigenen Browser messen).

Das unäre “+” in “+(new Date())” stellt lediglich sicher, dass das Date-Objekt als Zahl interpretiert wird (etwa wie in ToNumber(GetValue(new Date())), siehe ECMA Script Spezifikation, S. 84).

Warum aber setzt dann überhaupt jemand “new Date()” ein?

TomWij hat mich aufgeklärt: Date.now() funktioniert nicht in allen Browsern, insbesondere nicht im Internet Explorer vor Version 9. Auf dem Server (in Node.js) kann man es also bedenkenlos verwenden. Auf der Client-Seite jedoch nicht.

Gut zu wissen!


mforo> Hi guys. Why is +(new Date) used instead of new Date() in meteor code? any reason i should do it like that too?
fsfsfs> + is a way of making sure this is cast to "integer" (lol) I guess
fsfsfs> why don't they use Date.now() instead?
fsfsfs> Date.now() doesn't create an object, and is faster by like 5 times when I tested using FF 15
fsfsfs> http://jsperf.com/date-now-vs-new-date
fsfsfs> I'd be interested if there are other differences I didn't get.
tomwij> fsfsfs: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now
tomwij> See Compatibility, I'm willing to believe they are using that syntax just for the sake of backwards compatibility.
tomwij> And probably performance isn't so big of a deal, assuming these calls are on the client. If they were on the server, it'd be a differente story...
tomwij> (It be more nice if they introduced shims and not rely on such syntax)
mforo> Im talking about server calls. Mainly for adding datestamps on new inserts.
mforo> i've seen the +(new Date) way used in meteor packages, accounts mainly. That's why i wonder.
fsfsfs> woa, IE >=9
fsfsfs> k
fsfsfs> Well, one can use it on the server.

This post was written by

Florian Sesser – who has written posts on IT:Agenten GmbH.
Systems Architect. Security Engineer, Software Developer

Email

Tags: , , , ,

Comments are closed.