环境:
- 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
答案 0 :(得分:1)
正如您通过访问Date.prototype.constructor
所看到的那样,Date.prototype
确实存在。 toString()
对象的Date
方法返回对象的人类可读形式。
正如语言标准所规定的那样,toString
方法在Date.prototype
上定义。在控制台中打印对象首先将其转换为字符串。由于原型本身不是有效日期,因此该方法返回“无效日期”。
您还可以使用new Date(NaN)
生成无效日期。
答案 1 :(得分:1)
Date原型对象本身就是一个Date对象(
[[Class]]
为"Date"
),[[PrimitiveValue]]
为NaN
。
这样的对象在您的控制台中显示为Invalid Date
(它显示调用toString
方法的结果) - new Date(NaN)
也是如此。显然,Date.prototype
确实存在,它是一个对象,而不是undefined
。
类似地," 布尔原型对象本身是一个布尔对象(其[[Class]]
是"Boolean"
),其值为false
。&# 34 ;.原始包装器对象没有特殊显示,因此它显示为由Boolean
构造函数构造的普通对象。