为什么Chrome Dev Tool会将日期__proto__显示为无效日期?

Sha*_*lle 89 javascript google-chrome-devtools

我知道__proto__已被弃用(或不是标准的一部分)而且所有这些但我仍然很好奇当它看到无效日期时我看到的__proto__值...

var myDate = new Date(1331869050000);
Run Code Online (Sandbox Code Playgroud)

小智 87

"当它说无效日期时,我仍然很好奇它意味着什么"

这只是构造函数toStringprototype对象的值Date.


Date.prototype.toString(); // "Invalid Date"
Run Code Online (Sandbox Code Playgroud)

如果你愿意,可以覆盖它......

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

var myDate = new Date(1331869050000);
myDate.__proto__; // I like turtles.
Run Code Online (Sandbox Code Playgroud)

有点偏离主题,但是__proto__在下一版ECMAScript的当前工作草案中,代号为Harmony.

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

  • 添加了带有指定__proto__功能的B.3.1节.

  • 你很接近,但"为什么"部分仍然缺失,原因是[`Date.prototype`](http://es5.github.com/#x15.9.5)对象本身就是一个*Date对象*但它的`[[PrimitiveValue]]`内部属性是'NaN`(日期对象上的这个内部属性存储[时间值](http://es5.github.com/#x15.9.1.1)),所以它实际上并不代表有效日期.`Date.prototype`是一个类似于`new Date(NaN)`的对象...... (49认同)
  • 所以基本上没有错误,Chrome只是反映了没有显示真值的toString() (4认同)
  • 再加上一只爱龟的人 (3认同)