javascript:`Date()`和`new Date()`

时间:2018-11-13 19:04:45

标签: javascript date

Date()new Date()为什么给出不同的结果? Date()如何实现,为什么要这样实现?

typeof(Date())
>>  "string"
typeof(new Date())
>>  "object"

2 个答案:

答案 0 :(得分:2)

  

Date()如何实现?

有多种方法可以确定函数是否用new调用,一种方法是检查this的值,另一种方法是new.target(伪代码):

 function Date() {
   if(!(this instanceof Date)) {
     return "string";
  }
}

但是内部对象通常不是用JS本身编写的,而是用运行JS的语言编写的。

  

为什么要这样实现?

您将永远无法获得答案。没有人做出糟糕的设计决定。

答案 1 :(得分:2)

这是documented的行为:

  

注意:仅可以通过将JavaScript Date作为构造函数来调用来实例化JavaScript Date对象:将其作为常规函数调用(即不使用new运算符)将返回字符串而不是Dat e对象;与其他JavaScript对象类型不同,JavaScript Date对象没有文字语法。

您可以在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()