以两种不同的方式表现Javascript日期

时间:2018-09-06 20:31:22

标签: javascript datetime vue.js

我有一个Vue js前端,其中有以下内容的while循环:

while (this.day.getDay() != 0) {
  console.log(this.day)
  this.days.push(this.day)
  this.dates.push(this.day.toDateString())
  this.day.setDate(this.day.getDate() + 1)
}

循环在控制台中输出以下内容。 The output is this

我将变量实例化为:

day: new Date(Date.now()),
dates: [],
days:[]

我想知道为什么dates数组可以正常工作并包含sep 6,sep7和sep 8,但是days数组只有sep 09三次吗?同样奇怪的是,当我记录this.day时,它记录了正确的日期,但是没有将其添加到days数组中。这是怎么回事?

1 个答案:

答案 0 :(得分:2)

执行此行时:

this.days.push(this.day)

您每次都按住相同的Date对象。您永远不会重新分配this.day,只用setDate对其进行突变,并且每次这样做都将更新该数组中的所有引用。

但是在运行此行时:

this.dates.push(this.day.toDateString())

当您按下按钮时,您正在捕获状态,字符串是不可变的。

有关获得的内容的简单示例,请查看此

const foo = {bar: 3};
const arr = [foo, foo, foo]; // all the same foo
arr.map(x => x.bar); // 3, 3, 3
foo.bar = 5;
arr.map(x => x.bar); // 5, 5, 5