为什么Chrome开发工具将日期__proto__显示为无效日期?


Answers:


87

“我仍然对表示无效日期的含义感到好奇”

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


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

您可以根据需要覆盖它...

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

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

主题不大,但是__proto__在下一版ECMAScript的当前工作草案中,代号为Harmony。

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

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

49
您接近了,但“为什么”部分仍然缺失,原因是该Date.prototype对象本身就是Date对象,但是其[[PrimitiveValue]]内部属性是NaN(date对象上的此内部属性存储了time值),所以它不代表实际上是有效日期。Date.prototype是与new Date(NaN)... 类似的物体
Christian C.Salvadó2012年

@CMS:很有道理。很好的信息。如果需要,可以随时将其添加到答案中。

4
因此基本上没有错误,Chrome只是反映了toString()并没有显示出真实的价值
Kat Lim Ruiz 2014年

3
再加上一个对海龟的热爱
Guy

2

考虑到您创建了一个新的Date对象,我不必担心。原因是,如果您尝试以下代码:

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

这将确定您是继承Date对象的方法,并且实际上是定义了Date。

如果您想进一步调查,请看这篇文章。


0

Date实例的原型没有定义的值。仅实例具有值。您在实例化它时定义它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.