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

Bun*_*ker 1 javascript

我有一个Date对象,我想创建另一个四小时后的Date对象.我写了以下代码

eventStart = new Date();

eventEnd = eventStart;
eventEnd.setHours(eventEnd.getHours() + 4);

console.log(eventStart);
console.log(eventEnd);
Run Code Online (Sandbox Code Playgroud)

两个console.logs在四小时后给出相同的日期?

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

另见JSFiddle:http://jsfiddle.net/AT3K2/

Den*_*ret 6

当你这样做

eventEnd = eventStart;
Run Code Online (Sandbox Code Playgroud)

你的值设置eventEnd相同的eventStart,这是一个参考到相同的对象.也就是说,您没有两个对象,您有一个对象和两个对象:

+---------------------+
| eventStart variable |---\
+---------------------+   |    +------------------------+
                          +--->| the actual Date object |
+---------------------+   |    +------------------------+
| eventEnd variable   |---/
+---------------------+

要创建一个生命独立的新对象,请执行以下操作:

eventEnd = new Date(eventStart.getTime());
Run Code Online (Sandbox Code Playgroud)

此操作通常称为克隆.