Wie und warum funktioniert eigentlich +new Date()?

Ich wundere mich warum und wie var myTime = +new Date() funktioniert und den Timestamp in Millisekunden (als WorkAround für alte Browser, die nicht die in ECMAScript 5 eingeführte Methode Date.now() beherrschen) zurückgibt.
Was genau macht der + – Operator mit der alten new Date() – Funktion die ein Datums-Objekt zurückgibt?

Was passiert da genau? Wir haben ein neues Datum-Objekt und casten es zu einer Nummer.

var dateObj = new Date;

Nun wird der so genannte „Unary + Operator“ benutzt:

var myTime = +dateObj;

Der unary + operator ruft intern die Funktion ToNumber() auf. Wenn das Argument für diesen Aufruf ein Objekt ist (auch ein Datum-Objekt ist ein Objekt), so wird die Funktion ToPrimitive() aufgerufen. In der Spezifikation steht darüber:

Return a default value for the Object. The default value of an object is retrieved by calling the [[DefaultValue]] internal method of the object, passing the optional hint PreferredType. The behaviour of the [[DefaultValue]] internal method is defined by this specification for all native ECMAScript objects in 8.12.8.

In Punkt 8.12.8 schreibt die Spezifikation:

Let valueOf be the result of calling the [[Get]] internal method of object O with argument „valueOf“.

Flattr this!

Ein Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.