Por que o Chrome Dev Tool mostra uma data __proto__ como data inválida?

89

Eu sei que __proto__está obsoleto (ou não faz parte do padrão) e tudo isso, mas ainda estou curioso para saber o que significa quando diz Data inválida quando vejo o __proto__valor de ..

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

Respostas:

87

"Ainda estou curioso para saber o que significa quando diz Data inválida"

Esse é simplesmente o toStringvalor do prototypeobjeto da Datefunção construtora.


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

Você pode substituí-lo se quiser ...

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

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

Um pouco fora do assunto, mas __proto__ está no rascunho de trabalho atual para a próxima versão do ECMAScript, codinome Harmony.

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

  • Adicionada seção B.3.1 com __proto__recursos específicos .
user1106925
fonte
49
Você está perto, mas o "por que" ainda está faltando, o motivo é que o Date.prototypeobjeto é um objeto Date por si só, mas sua [[PrimitiveValue]]propriedade interna é NaN(esta propriedade interna em objetos de data armazena o valor de tempo ), portanto, não representa na verdade, uma data válida. Date.prototypeé um objeto semelhante a new Date(NaN)...
Christian C. Salvadó
@CMS: Faz sentido. Essa é uma boa informação. Sinta-se à vontade para adicioná-lo à resposta, se desejar.
4
então, basicamente, não há nenhum erro e o Chrome está apenas refletindo o toString () que não mostra o valor verdadeiro
Kat Lim Ruiz,
3
Mais um pelo amor às tartarugas
Guy,
2

considerando que você criou um novo objeto Date, eu não me preocuparia com isso. O motivo é, se você tentar este código:

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

Isso determinará que você está herdando os métodos dos objetos Date e que, de fato, a Date ESTÁ definida.

Se você quiser uma investigação mais aprofundada, dê uma olhada neste post.

Ben Sewards
fonte
0

O protótipo de uma instância de Date não tem valor definido. Apenas a instância tem um valor. Você o define ao instanciá-lo.

dmvianna
fonte