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)"
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) 的字符串。
和:
当
Date
作为new
表达式的一部分被调用时,它是一个构造函数:它初始化新创建的对象。
因此,new Date(...)
返回一个obj instanceof Date
为真的对象,而Date(...)
基本上返回与new Date().toString()
.
new Date
创建一个新的 Date 对象,您可以使用不同的日期修改或初始化该对象,同时Date
返回当前日期/时间的字符串,忽略其参数。
查看JavaScript Date以获得快速的 API 参考和代码测试平台。您可以看到Date()
调用 without的函数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)
现在是 2017 年,我也有同样的问题。我在阅读后发现的答案是:
“执行显式类型转换的最简单方法是使用 Boolean() 、 Number() 、 String() 或 Object() 函数。我们已经将这些函数视为包装对象的构造函数。在没有 new 的情况下调用时运算符,但是,它们用作转换函数并执行类型转换..”
“核心 JavaScript 的内置类在 toString() 转换之前尝试 valueOf() 转换,但 Date 类除外,它执行 toString() 转换。”
因此,在没有 new 关键字的情况下调用 Date() 执行类型转换。并且由于 Date 是一个对象并且应该发生对象到原始对象,因此 date 对象默认调用 toString() (尽管 Date 也具有有意义的 valueOf() 方法)。
在“JavaScript: The Definitive Guide”一书中找到的。留给刚开始学习 JS 的后代吧:)
new Date()
根据输入参数Date()
返回日期并在浏览器上返回今天的日期。