Tại sao Chrome Dev Tool hiển thị ngày __proto__ là Ngày không hợp lệ?


89

Tôi biết __proto__nó không được chấp nhận (hoặc không phải là một phần của tiêu chuẩn) và tất cả những điều đó nhưng tôi vẫn tò mò về ý nghĩa của nó khi nó báo Ngày không hợp lệ khi tôi nhìn vào __proto__giá trị của ..

var myDate = new Date(1331869050000);

Câu trả lời:


87

"Tôi vẫn tò mò về ý nghĩa của nó khi nó nói Ngày không hợp lệ"

Đó chỉ đơn giản là toStringgiá trị của prototypeđối tượng của Datehàm khởi tạo.


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

Bạn có thể ghi đè nó nếu bạn thích ...

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

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

Một chút lạc đề, nhưng __proto__đang trong bản nháp hiện tại cho phiên bản tiếp theo của ECMAScript, tên mã là Harmony.

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

  • Đã thêm phần B.3.1 với __proto__tính năng cụ thể .

49
Bạn đóng rồi nhưng vẫn thiếu phần "tại sao", nguyên nhân là bản thân Date.prototypeđối tượng là đối tượng Date nhưng thuộc tính [[PrimitiveValue]]bên trong của nó NaN(thuộc tính bên trong này đối tượng date lưu giá trị thời gian ) nên không thể hiện thực sự là một ngày hợp lệ. Date.prototypelà một vật thể tương tự như new Date(NaN)...
Christian C. Salvadó

@CMS: Có lý. Đó là thông tin tốt. Hãy thêm nó vào câu trả lời nếu bạn muốn.

4
nên về cơ bản, không có lỗi và Chrome chỉ là phản ánh toString () mà không hiển thị các giá trị thực
Kat Lim Ruiz

3
Thêm một vì tình yêu của rùa
Guy

2

Nếu bạn đã tạo một đối tượng Date mới, tôi sẽ không lo lắng về điều đó. Lý do là, nếu bạn thử mã này:

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

Điều này sẽ xác định rằng bạn đang kế thừa các phương thức của đối tượng Ngày và trên thực tế, Ngày IS được định nghĩa.

Nếu bạn muốn điều tra thêm, hãy xem này đường bưu điện.


0

Nguyên mẫu của một phiên bản Date không có giá trị xác định. Chỉ cá thể mới có giá trị. Bạn xác định nó khi bạn khởi tạo nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.