【问题标题】:Dates changing when I change another date [duplicate]当我更改另一个日期时日期更改[重复]
【发布时间】:2020-03-28 18:38:14
【问题描述】:

所以我在这里遇到了一个与更改日期对象的月份有关的奇怪错误。这是代码。

let date = new Date();
let captions = [];

for (let i=0; i < 12; i++) {
  let newDate = date;
  newDate.setMonth(date.getMonth() - i);
  let month = newDate.toLocaleString('default', { month: 'short' });
  let year = newDate.getFullYear();

  captions.push({month, year});
}

问题是日期变量的值在每个循环中都在变化。我能理解为什么。

有人吗?

【问题讨论】:

  • 因为= 不克隆 Date 对象,它只是创建一个单独的引用对同一个对象(顺便说一句,这不是 Date 对象特有的,这就是所有对象在 JS 中工作)。
  • 不错!立即获取!

标签: javascript date object


【解决方案1】:

您的问题与此作业有关:let newDate = date;

现在 newDate 是对原始 date 变量的引用。

正如 Lennholm 在他下面的评论中建议的那样:

"它不是对原始变量的引用,而是对同一个对象的引用 (在内存中)原始变量也引用。他们俩 变量是相互独立的。”

为避免这种情况,将其更改为:let newDate = new Date(date);

检查这个stackblitz

【讨论】:

  • "newDate 是对原始日期变量的引用" – 这有点误导,它不是对原始变量的引用,而是对同一个对象的引用(在内存中)原始变量也引用。这两个变量相互独立。
  • 谢谢@Lennholm。我更新了我的答案。
  • 感谢您的回答!这完全有道理!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多