Warum zeigt das Chrome Dev Tool ein Datum __proto__ als ungültiges Datum an?

89

Ich weiß, dass __proto__es veraltet ist (oder nicht Teil des Standards ist) und all das, aber ich bin immer noch neugierig, was es bedeutet, wenn dort ungültiges Datum steht, wenn ich den __proto__Wert von ..

var myDate = new Date(1331869050000);
Shane Courtrille
quelle

Antworten:

87

"Ich bin immer noch gespannt, was es bedeutet, wenn dort" Ungültiges Datum "steht."

Das ist einfach der toStringWert des prototypeObjekts der DateKonstruktorfunktion.


Date.prototype.toString(); // "Invalid Date"

Sie können es überschreiben, wenn Sie möchten ...

Date.prototype.toString = function() { return "I like turtles." };

var myDate = new Date(1331869050000);
myDate.__proto__; // I like turtles.

Ein wenig abseits des Themas, befindet sich aber __proto__im aktuellen Arbeitsentwurf für die nächste Version von ECMAScript, Codename Harmony.

http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts

  • Abschnitt B.3.1 mit spezifizierter __proto__Funktion hinzugefügt .
user1106925
quelle
49
Sie sind nah dran, aber der "Warum" -Teil fehlt immer noch. Der Grund dafür ist, dass das Date.prototypeObjekt selbst ein Datumsobjekt ist , seine [[PrimitiveValue]]interne Eigenschaft jedoch NaN(diese interne Eigenschaft für Datumsobjekte speichert den Zeitwert ), sodass es nicht dargestellt wird eigentlich ein gültiges Datum. Date.prototypeist ein Objekt ähnlich new Date(NaN)...
CMS
@CMS: Sinnvoll. Das sind gute Infos. Fühlen Sie sich frei, es der Antwort hinzuzufügen, wenn Sie möchten.
4
Im Grunde gibt es keinen Fehler und Chrome spiegelt nur den toString () wider, der nicht den wahren Wert
anzeigt
3
Plus eins für die Liebe der Schildkröten
Guy
2

Wenn Sie ein neues Date-Objekt erstellen, würde ich mir darüber keine Sorgen machen. Der Grund ist, wenn Sie diesen Code versuchen:

var myDate = new Date(1331869050000);
alert(typeof myDate.getMonth != 'undefined')    //true

Dadurch wird festgestellt, dass Sie die Date-Objektmethoden erben und dass Date tatsächlich definiert ist.

Wenn Sie weitere Untersuchungen wünschen, schauen Sie sich diesen Beitrag an.

Ben Sewards
quelle
0

Der Prototyp einer Date-Instanz hat keinen definierten Wert. Nur die Instanz hat einen Wert. Sie definieren es, wenn Sie es instanziieren.

dmvianna
quelle