Mengapa Alat Pengembang Chrome menampilkan tanggal __proto__ sebagai Tanggal Tidak Valid?

89

Saya tahu __proto__sudah usang (atau bukan bagian dari standar) dan semua itu tapi saya masih penasaran apa artinya ketika dikatakan Invalid Date ketika saya melihat __proto__nilai ..

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

Jawaban:

87

"Saya masih penasaran apa artinya kalau dikatakan Invalid Date"

Itu hanyalah toStringnilai prototypeobjek dari Datefungsi konstruktor.


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

Anda dapat menggantinya jika Anda suka ...

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

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

Sedikit keluar dari topik, tetapi __proto__sedang dalam draft kerja saat ini untuk versi ECMAScript berikutnya, codename Harmony.

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

  • Menambahkan bagian B.3.1 dengan __proto__fitur tertentu .
pengguna1106925
sumber
49
Anda sudah dekat, tetapi bagian "mengapa" masih hilang, alasannya adalah bahwa Date.prototypeobjek tersebut adalah objek Tanggal dengan sendirinya tetapi [[PrimitiveValue]]properti internalnya adalah NaN(properti internal pada objek tanggal ini menyimpan nilai waktu ), jadi tidak mewakili sebenarnya tanggal yang valid. Date.prototypeadalah objek yang mirip dengan new Date(NaN)...
Christian C. Salvadó
@CMS: Masuk akal. Itu info yang bagus. Jangan ragu untuk menambahkannya ke jawaban jika Anda mau.
4
jadi pada dasarnya, tidak ada kesalahan dan Chrome hanya mencerminkan toString () yang tidak menunjukkan nilai sebenarnya
Kat Lim Ruiz
3
Ditambah satu untuk cinta kura
Guy
2

mengingat Anda membuat objek Tanggal baru, saya tidak akan mengkhawatirkannya. Alasannya, jika Anda mencoba kode ini:

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

Ini akan menentukan bahwa Anda mewarisi metode objek Tanggal dan pada kenyataannya, Tanggal IS ditentukan.

Jika Anda ingin penyelidikan lebih lanjut, lihat posting ini .

Ben Sewards
sumber
0

Prototipe instance Tanggal tidak memiliki nilai yang ditentukan. Hanya instance yang memiliki nilai. Anda mendefinisikannya saat Anda membuatnya.

dmvianna
sumber