date与JavaScript中的新date
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)"
从规格 :
Date
作为函数调用而不是构造函数时,它返回一个表示当前时间(UTC)的String。
和:
Date
作为new
expression式的一部分被调用时,它是一个构造函数:它初始化新创build的对象。
因此, new Date(...)
返回一个对象,使得obj instanceof Date
为true,而Date(...)
基本上返回与new Date().toString()
。
new Date
创build一个新的Date对象,您可以使用不同的date修改或初始化Date对象,而Date
将返回当前date/时间的string,而忽略其参数。
查看JavaScriptdate以获得快速的API参考和代码testing平台。 你可以看到调用的Date()
函数不带new
,不带任何参数,并总是返回当前date/时间的string
表示forms。 如果您修改样本为:
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)
new Date()
返回基于input参数的Date()
, Date()
返回浏览器上的今天的date。
date可让您创build表示date/时间的对象。 这并不意味着被称为一个function。 您可以在这里获得更多信息: date – MDN
Date
类可以被称为构造函数或方法有一个内置的代码,如:
function Date(args){ if (this.constructor == Date){ // if you call : new Date(args) }else{ // if you call as method : Date() return new Date() } }
因此,如果您将它称为方法,则会重新调用构造函数以返回当前的date和时间。
调用一个构造函数是一个明显的错误,它会做(可能)与您的应用程序范围的意想不到的事情,很久之前,你会成为集团bug修复会议的关注焦点。
按照规范的devise者的意图创build一个Date对象,而不是将这些解决scheme编码为工程师认为JS程序员是愚蠢的保护措施。 (在实验室里工作,在谈话中坐在旁边的椅子上,处理了这个问题,然后继续前进)
如果你疯狂地反对新的,你可以尝试object.create,但在写的时候它是慢的,除非你打算实现多态inheritance,那么额外的努力奖励较less。
这是2017年,我有同样的问题。 在阅读之后我发现了一个答案:
“执行显式types转换最简单的方法是使用Boolean(),Number(),String()或Object()函数,我们已经看到这些函数是包装对象的构造函数。运算符,但是,他们作为转换函数和执行types转换..“
“内核类的JavaScript尝试在toString()转换之前尝试valueOf()转换,除了Date类,它执行toString()转换。
所以Date()调用没有新的关键字执行types转换。 由于Date是一个对象,并且对象到原语应该发生,默认情况下,date对象调用toString()(尽pipeDate也有有意义的valueOf()方法)。
发现在“JavaScript:权威指南”一书中。 留在这里为刚刚开始学习JS的后代