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吗?或者这也适用于其他对象吗?@您对所有对象都有相同的“问题”:变量的值是对对象的引用,因此当您传递该值时,您传递对同一对象的引用。