Dlaczego Chrome Dev Tool pokazuje daty __proto__ jako nieprawidłową datę?

89

Wiem, że __proto__jest przestarzały (lub nie jest częścią standardu) i tak dalej, ale wciąż jestem ciekawy, co to znaczy, gdy widzę __proto__wartość „ Nieprawidłowa data”, gdy patrzę na wartość…

var myDate = new Date(1331869050000);
Shane Courtrille
źródło

Odpowiedzi:

87

„Wciąż ciekawi mnie, co to znaczy, gdy jest napisane„ Nieprawidłowa data ”

To po prostu toStringwartość prototypeobiektu Datefunkcji konstruktora.


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

Możesz to zmienić, jeśli chcesz ...

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

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

Trochę poza tematem, ale __proto__znajduje się w aktualnym szkicu roboczym następnej wersji ECMAScript, kryptonim Harmony.

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

  • Dodano sekcję B.3.1 ze specyfikacją __proto__funkcji.
user1106925
źródło
49
Jesteś blisko, ale wciąż brakuje części „dlaczego”, powodem jest to, że Date.prototypeobiekt sam w sobie jest obiektem Date, ale jego [[PrimitiveValue]]wewnętrzna właściwość jest NaN(ta wewnętrzna właściwość obiektów daty przechowuje wartość czasu ), więc nie reprezentuje faktycznie ważna data. Date.prototypejest obiektem podobnym do new Date(NaN)...
Christian C. Salvadó
@CMS: To ma sens. To dobra informacja. Jeśli chcesz, możesz dodać to do odpowiedzi.
4
więc w zasadzie nie ma błędu, a Chrome po prostu odzwierciedla toString (), który nie pokazuje prawdziwej wartości
Kat Lim Ruiz
3
Plus jeden za miłość do żółwi
Guy
2

biorąc pod uwagę, że stworzyłeś nowy obiekt Date, nie martwiłbym się tym. Powodem jest to, że jeśli spróbujesz tego kodu:

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

To określi, że dziedziczysz metody obiektów Date i że w rzeczywistości Data jest zdefiniowana.

Jeśli chcesz dokładniej zbadać sprawę, spójrz na ten post.

Ben Sewards
źródło
0

Prototyp instancji Date nie ma zdefiniowanej wartości. Tylko instancja ma wartość. Definiujesz to podczas tworzenia instancji.

dmvianna
źródło