JavaScript中的日期与新日期

Jon*_*han 49 javascript

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)"
Run Code Online (Sandbox Code Playgroud)

pim*_*vdb 103

规格:

Date作为函数而不是构造函数调用时,它返回表示当前时间(UTC)的String.

和:

Date作为new表达式的一部分调用时,它是一个构造函数:它初始化新创建的对象.

因此,new Date(...)返回一个如此obj instanceof Date为真的对象,而Date(...)基本上返回相同的对象new Date().toString().

  • @Benny观察以下内容:`function Test(){var private ="private value"; this.public ="公共价值"; 返回"返回值"; 调用`new Test()`创建一个具有私有和公共值的对象.调用`Test()`返回一个字符串. (3认同)
  • 任何关于如何实现 Date() 函数的伪代码,以便它可以作为构造函数和常规函数工作?谢谢 (2认同)

小智 18

new Date创建一个新的Date对象,您可以使用不同的日期修改或初始化该对象,同时Date返回当前日期/时间的字符串,忽略其参数.


nkr*_*ron 6

查看JavaScript日期以获取快速API参考和代码测试平台.您可以看到Date()调用的函数new不带任何参数,并始终返回string当前日期/时间的表示.如果您将示例修改为:

console.log(Date());
console.log(Date(1329429600000));
Run Code Online (Sandbox Code Playgroud)

你会发现两者的结果是相同的(因为JavaScript会忽略传递给函数的额外参数):

Wed Apr 11 2012 09:58:11 GMT-0700 (PDT)
Wed Apr 11 2012 09:58:11 GMT-0700 (PDT)
Run Code Online (Sandbox Code Playgroud)


pol*_*llx 5

现在是 2017 年,我也有同样的问题。我在阅读后发现的答案是:

“执行显式类型转换的最简单方法是使用 Boolean() 、 Number() 、 String() 或 Object() 函数。我们已经将这些函数视为包装对象的构造函数。在没有 new 的情况下调用时运算符,但是,它们作为转换函数工作并执行类型转换..”

“核心 JavaScript 的内置类在 toString() 转换之前尝试 valueOf() 转换,但 Date 类除外,它执行 toString() 转换。”

因此,在没有 new 关键字的情况下调用 Date() 执行类型转换。并且由于 Date 是一个对象并且应该发生对象到原始对象,因此 date 对象默认调用 toString() (尽管 Date 也具有有意义的 valueOf() 方法)。

在“JavaScript: The Definitive Guide”一书中发现。留给刚开始学习 JS 的后代吧:)