Javascript 为什么我得到了不同的结果?什么';这两种代码有什么不同?

Javascript 为什么我得到了不同的结果?什么';这两种代码有什么不同?,javascript,date,Javascript,Date,这是我在这个网站上的第一个问题。哈哈。 我试图制作一些从昨天上午12点到现在相隔15分钟的虚拟数据 这是我的代码 而不是这个 dataForX.setMinutes(dataForX.getMinutes() + 15); 但是,我还是不明白为什么会有不同的结果 您能告诉我这个结果的原因吗?您需要一份日期对象的副本: arrayOfData.push({ 日期:新日期(dataForX.getTime()),//当您编写dataForX.setMinutes(dataForX.getMinut

这是我在这个网站上的第一个问题。哈哈。 我试图制作一些从昨天上午12点到现在相隔15分钟的虚拟数据

这是我的代码

而不是这个

dataForX.setMinutes(dataForX.getMinutes() + 15);
但是,我还是不明白为什么会有不同的结果


您能告诉我这个结果的原因吗?

您需要一份日期对象的副本:

arrayOfData.push({

日期:新日期(dataForX.getTime()),//当您编写
dataForX.setMinutes(dataForX.getMinutes()+15)时;
您实际上在更改同一对象的引用,因此所有日期都是相同的


当您写入
dataForX=new Date(dataForX.setMinutes(dataForX.getMinutes()+15));
时,您每次都会创建一个新对象(引用)。变量的名称相同,但引用会更改。您首先存储旧引用,然后创建一个新引用

考虑下面的代码片段,其原理与日期相同,但我创建了一个对象以便于理解。 当我将foo更改为
foo={bar:10};
时,您可能会认为数组中的值将更改为10,但事实并非如此。我们正在创建一个新引用,因此旧引用不受更改的影响

constmyarray=[];
设foo={bar:3};
myArray.push(foo);
console.log(myArray);//将打印3
foo.bar=5;
console.log(myArray);//将打印5
foo={bar:10};//使用相同的变量名创建新引用
console.log(myArray);//仍将打印5
myArray.push(foo);
console.log(myArray);//将打印5和10
foo.bar=12;

console.log(myArray);//将打印5和12
omg,我太蠢了。我完全明白了。谢谢你的帮助。我喜欢这个网站!很高兴我能帮上忙。事实上,这是一件非常棘手的事情,即使对有经验的开发人员来说也是如此。很容易忘记你正在更改同一个对象,或者创建一个新对象,并且你会发现自己正在对错误进行故障排除或者几个小时。没必要为此感到愚蠢:P
dataForX = new Date(dataForX.setMinutes(dataForX.getMinutes() + 15));
dataForX.setMinutes(dataForX.getMinutes() + 15);