new Date()
获取序数并返回Date
个对象
Date()
做了什么,以及它如何给出不同的时间?
>>> new Date(1329429600000)
Date {Fri Feb 17 2012 00:00:00 GMT+0200 (القدس Standard Time)}
>>> Date(1329429600000)
"Tue Mar 06 2012 15:29:58 GMT+0200 (Jerusalem Standard Time)"
答案 0 :(得分:99)
来自specs:
当
Date
作为函数而不是构造函数调用时,它返回表示当前时间(UTC)的String。
和
当
Date
作为new
表达式的一部分被调用时,它是一个构造函数:它初始化新创建的对象。
因此,new Date(...)
返回一个obj instanceof Date
为真的对象,而Date(...)
基本上返回与new Date().toString()
相同的位置。
答案 1 :(得分:18)
new Date
创建一个新的Date对象,您可以使用不同的日期修改或初始化,而Date
返回当前日期/时间的字符串,忽略其参数。
答案 2 :(得分:6)
查看JavaScript Date以获取快速API参考和代码测试平台。您可以看到在没有Date()
的情况下调用的new
函数不接受任何参数,并且始终返回当前日期/时间的string
表示。如果您将样本修改为:
console.log(Date());
console.log(Date(1329429600000));
你会发现两者的结果是相同的(因为JavaScript忽略了传递给函数的额外参数):
Wed Apr 11 2012 09:58:11 GMT-0700 (PDT)
Wed Apr 11 2012 09:58:11 GMT-0700 (PDT)
答案 3 :(得分:2)
new Date()
根据输入参数返回日期,Date()
在浏览器上返回今天的日期。
答案 4 :(得分:2)
日期可让您创建表示日期/时间的对象。它并不意味着被称为功能。您可以在此处获取更多信息:Date - MDN
答案 5 :(得分:1)
Date
类可以作为构造函数或方法调用,以具有内置代码,如:
function Date(args){
if (this.constructor == Date){
// if you call : new Date(args)
}else{
// if you call as method : Date()
return new Date()
}
}
因此,如果您像方法一样调用它,它会重新调用构造函数以返回当前日期和时间。
答案 6 :(得分:1)
2017年,我心中也有同样的问题。我在一些阅读后找到了答案:
“执行显式类型转换的最简单方法是使用Boolean(),Number(),String()或Object()函数。我们已经将这些函数看作包装器对象的构造函数。但是,如果没有new运算符,它们将作为转换函数并执行类型转换。“
“核心JavaScript尝试的内置类 toString()转换之前的valueOf()转换,Date类除外, 执行toString()转换。“
因此,在没有new关键字的情况下调用Date()执行类型转换。由于Date是一个对象,并且应该发生一个对象到原语,默认情况下日期对象调用toString()(尽管Date也有有意义的valueOf()方法)。
在“JavaScript:The Definitive Guide”一书中找到了。将它留给刚刚开始学习JS的后代:)
答案 7 :(得分:0)
将构造函数作为函数调用是完全错误的,它会(可能)对您的应用程序范围做出意想不到的事情,并且在很长一段时间内,您将成为组错误修复会话中关注的焦点。
按照规范的设计者的意图创建一个日期对象,不要将代码编写为工程策略,这些工作区被认为是JS程序员愚蠢的工程师实施为安全措施。 (在实验室工作,在谈话期间在下一把椅子上,处理并继续前进)
如果你疯狂地反对新的,你可以试试object.create,但在写作时速度较慢,除非你打算实现多态继承,否则需要额外的努力以减少奖励。