Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当应用于一个对象时,setHours()更改两个对象的日期_Javascript - Fatal编程技术网

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

Javascript 当应用于一个对象时,setHours()更改两个对象的日期,javascript,Javascript,我有一个日期对象,我想创建另一个四小时后的日期对象。我编写了以下代码 eventStart = new Date(); eventEnd = eventStart; eventEnd.setHours(eventEnd.getHours() + 4); console.log(eventStart); console.log(eventEnd); 两个console.log在四小时后给出相同的日期 为什么setHours在这里同时适用于这两个日期对象?有解决办法吗 另请参见以下JSFIDL

我有一个日期对象,我想创建另一个四小时后的日期对象。我编写了以下代码

eventStart = new Date();

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

console.log(eventStart);
console.log(eventEnd);
两个console.log在四小时后给出相同的日期

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

另请参见以下JSFIDLE:

eventEnd = eventStart;
eventEnd
的值设置为
eventStart
相同的,这是对同一对象的引用。也就是说,您没有两个对象,您有一个对象和对它的两个引用:

+---------------------+ | eventStart variable |---\ +---------------------+ | +------------------------+ +--->| the actual Date object | +---------------------+ | +------------------------+ | eventEnd variable |---/ +---------------------+ 此操作通常称为克隆。

当您执行此操作时

eventEnd = eventStart;
eventEnd
的值设置为
eventStart
相同的,这是对同一对象的引用。也就是说,您没有两个对象,您有一个对象和对它的两个引用:

+---------------------+ | eventStart variable |---\ +---------------------+ | +------------------------+ +--->| the actual Date object | +---------------------+ | +------------------------+ | eventEnd variable |---/ +---------------------+
此操作通常称为克隆。

正确,值得向OP提及-与其他语言不同,JS日期不是不变的。@BenjaminGruenbaum这里的许多编码人员都知道一种语言,其中标准日期API与之类似,也很糟糕。。。你知道JavaScript的语言就像汽车和货物的语言一样…这只是日期api吗?或者这也适用于其他对象?@您对所有对象都有相同的“问题”:变量的值是对该对象的引用,因此当您传递该值时,您传递对同一对象的引用。正确,值得一提的是OP-与其他语言不同,JS日期并不是一成不变的。@BenjaminGruenbaum这里的许多程序员都知道一种语言,其中标准日期API是类似的,而且也很糟糕。。。你知道JavaScript的语言就像汽车和货物的语言一样…这只是日期api吗?或者这也适用于其他对象吗?@您对所有对象都有相同的“问题”:变量的值是对对象的引用,因此当您传递该值时,您传递对同一对象的引用。