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

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 .

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 .


0

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.