JavaScript 中的日期与新日期

IT技术 javascript
2021-01-29 10:20:37

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)"
6个回答

规格

Date作为函数而不是构造函数调用时,它返回一个表示当前时间 (UTC) 的字符串。

和:

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

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

@Benny 以下是它的实现方式:function Date(/* ... */) { if (!(this instanceof Date)) { return new Date().toString(); } else { /* we got new, so do the constructor logic */ }
2021-03-14 10:20:37
@Benny 观察以下内容:function Test(){ var private = "private value"; this.public = "public value"; return "return value"; } 调用new Test()创建一个具有私有和公共值的对象。调用Test()返回一个字符串。
2021-03-15 10:20:37
关于如何实现 Date() 函数的任何伪代码,以便它可以作为构造函数和常规函数工作?谢谢
2021-03-16 10:20:37

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()返回日期并在浏览器上返回今天的日期。