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);

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 .

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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.