Date()
和new Date()
为什么给出不同的结果? Date()
如何实现,为什么要这样实现?
typeof(Date())
>> "string"
typeof(new Date())
>> "object"
答案 0 :(得分:2)
Date()如何实现?
有多种方法可以确定函数是否用new
调用,一种方法是检查this
的值,另一种方法是new.target
(伪代码):>
function Date() {
if(!(this instanceof Date)) {
return "string";
}
}
但是内部对象通常不是用JS本身编写的,而是用运行JS的语言编写的。
为什么要这样实现?
您将永远无法获得答案。没有人做出糟糕的设计决定。
答案 1 :(得分:2)
这是documented的行为:
注意:仅可以通过将JavaScript
Date
作为构造函数来调用来实例化JavaScriptDate
对象:将其作为常规函数调用(即不使用new
运算符)将返回字符串而不是Dat
e对象;与其他JavaScript对象类型不同,JavaScriptDate
对象没有文字语法。
您可以在1997年的{https://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%201st%20edition,%20June%201997.pdf)的ECMAScript 1st版本中找到它:
15.9.2.8 日期()
创建并返回一个字符串,就好像表达式 new Date().toString()