更改副本的值(日期变量)也会更改原始值(JS)

时间:2020-04-05 13:57:08

标签: javascript variables copy

我有一个日期变量,希望以此为基础来使用它:

var Uhrzeit = new Date();

现在,我想将此基础复制到一个新变量中以使用它,为此,我刚刚创建了一个新变量并为其分配了第一个变量的值。

var u = Uhrzeit

我有这个小代码段:

var Uhrzeit = new Date();
Uhrzeit.setMinutes(0);
Uhrzeit.setSeconds(0);
console.log("Uhrzeit: " + Uhrzeit);
Uhrzeit.setSeconds(61);
console.log("Uhrzeit: " + Uhrzeit)
var u = Uhrzeit;
console.log("u: " + u);
u.setSeconds(200);
console.log("u: " + u);
console.log("Uhrzeit: " + Uhrzeit)

它生成以下输出:

Uhrzeit: Sun Apr 05 2020 15:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)
Uhrzeit: Sun Apr 05 2020 15:01:01 GMT+0200 (Mitteleuropäische Sommerzeit)
u: Sun Apr 05 2020 15:01:01 GMT+0200 (Mitteleuropäische Sommerzeit)'
u: Sun Apr 05 2020 15:04:20 GMT+0200 (Mitteleuropäische Sommerzeit)
Uhrzeit: Sun Apr 05 2020 15:04:20 GMT+0200 (Mitteleuropäische Sommerzeit)

现在存在以下问题:最后,u的值为4 Min和20Sec。 Uhrzeit具有相同的值,应该具有1Min和1Sec的值。更改u的值时,为什么Uhrzeit与u具有相同的值?

我希望这不是重复的,我只用其他语言找到了有关此问题的帖子。

1 个答案:

答案 0 :(得分:0)

请注意:

var Uhrzeit = new Date();创建一个新的Date Instance,它是一个对象。

在分配var u = Uhrzeit的那一刻,在javascript中,这意味着u引用的日期与Uhrzeit引用的对象相同。

因此,对象的变量将引用保存在存储对象的内存中。通过分配引用对象的变量,只需将引用传递给新变量即可。

更改uUhrzeit时,它们都引用相同的对象,并且都更改相同的对象。

您必须改为这样做:

var u = new Date(Uhrzeit);,这将创建值为u的{​​{1}}。但是它们现在都将引用内存中的不同对象。