为什么Date.prototype是一个无效的日期,当Boolean.prototype是一个布尔{}?

时间:2014-07-02 22:02:24

标签: javascript prototype ecmascript-5

环境:
- Chrome控制台

我理解:

Boolean.prototype; //Boolean {}
Number.prototype; //Number {}

我无法理解:

Date.prototype; //Invalid Date

问题:

  • Date不同,为什么?
  • Date.prototype不存在?
Date.prototype.constructor; //function Date() { [native code] }
Date.prototype.constructor === Date; //true

2 个答案:

答案 0 :(得分:1)

很奇怪每个人如何将他们的答案写入评论。无论如何...

正如您通过访问Date.prototype.constructor所看到的那样,Date.prototype确实存在。 toString()对象的Date方法返回对象的人类可读形式。

正如语言标准所规定的那样,toString方法在Date.prototype上定义。在控制台中打印对象首先将其转换为字符串。由于原型本身不是有效日期,因此该方法返回“无效日期”。

您还可以使用new Date(NaN)生成无效日期。

答案 1 :(得分:1)

因为the spec says so

  

Date原型对象本身就是一个Date对象([[Class]]"Date"),[[PrimitiveValue]]NaN

这样的对象在您的控制台中显示为Invalid Date(它显示调用toString方法的结果) - new Date(NaN)也是如此。显然,Date.prototype 确实存在,它是一个对象,而不是undefined

类似地," 布尔原型对象本身是一个布尔对象(其[[Class]]"Boolean"),其值为false&# 34 ;.原始包装器对象没有特殊显示,因此它显示为由Boolean构造函数构造的普通对象。