gpt4 book ai didi

javascript - 使用 Date 对象调用 Date 构造函数

转载 作者:数据小太阳 更新时间:2023-10-29 05:29:25 25 4
gpt4 key购买 nike

Date 的 JS 文档声称有四种方法可以使用 Date 构造函数。来自 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date :

new Date();
new Date(value); // integer
new Date(dateString); // string
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

但是,似乎还有第五种使用构造函数的方法,即传递一个有效的日期对象。例如,以下在 chrome 控制台中运行良好:

date = new Date() // Wed Sep 02 2015 16:30:21 GMT-0700 (PDT)
date2 = new Date(date) // Wed Sep 02 2015 16:30:21 GMT-0700 (PDT)

它们是不同的对象,因此复制日期似乎是一种简单的方法:

date2 === date // false
date.setMonth(1) // 1422923421090
date // Mon Feb 02 2015 16:30:21 GMT-0800 (PST)
date2 // Wed Sep 02 2015 16:30:21 GMT-0700 (PDT)

所以我的问题是:

  1. 为什么这不在官方文档中?我错过了什么吗?
  2. 这是官方支持的构造函数使用吗?它适用于所有平台/浏览器吗?
  3. 这是制作 Date 对象副本的安全方法吗? date2 = new Date().setTime(date.getTime())?

最佳答案

直接来自 ECMAScript 6 spec 的相关部分:

If Type(value) is Object and value has a [[DateValue]] internal slot, then Let tv be thisTimeValue(value).

这基本上是说,如果您向 Date 构造函数传递一个参数并且它是一个对象并且它具有 [[DateValue]] 内部槽,则使用它来初始化新对象。

因此,您所看到的内容已记录在规范中。

这里有更多的细节:

enter image description here

但是,ES5 规范不一样,当你做你正在做的事情时,它会转换为一个字符串,然后由构造函数解析为一个字符串。虽然这可以将所有内容保留到秒,但它不会保留毫秒,因为默认字符串转换中不存在毫秒。所以,如果你想要一个完美的副本,那么你应该在 ES5 或更早版本中这样做:

var date = new Date();
var date2 = new Date(date.getTime());

关于javascript - 使用 Date 对象调用 Date 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32364860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com