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

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


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 相同?


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


30秒到达战场
浏览 97回答 1
1回答

慕标琳琳

请注意:var Uhrzeit = new Date();创建一个新的日期实例,它是一个对象。在您分配的那一刻var u = Uhrzeit,javascript 中的 this 意味着 u 指的是所指的同一个日期对象Uhrzeit。因此,对象的变量将引用保存在存储对象的内存中。通过分配一个引用对象的变量,只需将该引用传递给新变量。当您更改其中一个u或Uhrzeit它们都引用同一个对象时,它们都更改了同一个对象。你必须这样做:var u = new Date(Uhrzeit);这将创建u的值Uhrzeit。但是它们现在都将引用内存中的不同对象。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript