Pourquoi Chrome Dev Tool affiche-t-il une date __proto__ comme date non valide?

89

Je sais que __proto__c'est obsolète (ou ne fait pas partie de la norme) et tout cela, mais je suis toujours curieux de savoir ce que cela signifie quand il dit Date invalide lorsque je regarde la __proto__valeur de ..

var myDate = new Date(1331869050000);
Shane Courtrille
la source

Réponses:

87

"Je suis toujours curieux de savoir ce que cela signifie quand il est écrit Date invalide"

C'est simplement la toStringvaleur de l' prototypeobjet de la Datefonction constructeur.


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

Vous pouvez le remplacer si vous le souhaitez ...

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

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

Un peu hors sujet, mais __proto__est dans le projet de travail actuel pour la prochaine version d'ECMAScript, le nom de code Harmony.

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

  • Ajout de la section B.3.1 avec la __proto__fonctionnalité spécifiée .
utilisateur1106925
la source
49
Vous êtes proche, mais la partie "pourquoi" est toujours manquante, la raison est que l' Date.prototypeobjet est un objet Date en lui-même mais sa [[PrimitiveValue]]propriété interne est NaN(cette propriété interne sur les objets date stocke la valeur de l' heure ), donc elle ne représente pas en fait une date valide. Date.prototypeest un objet similaire à new Date(NaN)...
Christian C. Salvadó
@CMS: ça a du sens. C'est une bonne information. N'hésitez pas à l'ajouter à la réponse si vous le souhaitez.
4
donc en gros, il n'y a pas d' erreur et Chrome est juste Reflétant la toString () qui ne montre pas la valeur réelle
Kat Lim Ruiz
3
Plus un pour l'amour des tortues
Guy
2

étant donné que vous avez créé un nouvel objet Date, je ne m'en soucierais pas. La raison étant, si vous essayez ce code:

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

Cela déterminera que vous héritez des méthodes des objets Date et qu'en fait, Date EST définie.

Si vous souhaitez une enquête plus approfondie, jetez un œil à cet article.

Ben Sewards
la source
0

Le prototype d'une instance Date n'a pas de valeur définie. Seule l'instance a une valeur. Vous le définissez lorsque vous l'instanciez.

dmvianna
la source