setHours()在应用于一个对象时更改两个对象的日期

setHours() changes date for two objects when applied to one

本文关键字:两个 对象 日期 应用于 一个对象 setHours      更新时间:2023-09-26

我有一个Date对象,我想创建另一个4小时后的Date对象。我写了下面的代码

eventStart = new Date();
eventEnd = eventStart;
eventEnd.setHours(eventEnd.getHours() + 4);
console.log(eventStart);
console.log(eventEnd);

两个控制台。日志上显示的日期是四小时后?

为什么setHours适用于这里的两个日期对象?有解决办法吗?

还可以参见以下JSFiddle: http://jsfiddle.net/AT3K2/

当你这么做的时候

eventEnd = eventStart;

eventEnd的值设置为与eventStart相同的,即对同一对象的引用。也就是说,你没有两个对象,你有一个对象和对它的两个引用:

<前>+---------------------+eventStart变量|——'+---------------------+ | +------------------------++——>|实际的Date对象|+---------------------+ | +------------------------+eventEnd变量|——/+---------------------+

创建一个生命周期独立的新对象,如下所示:

eventEnd = new Date(eventStart.getTime());

此操作通常称为克隆。