为什么我的数组被覆盖?

我正在使用node.js为一个项目,我试图添加某些date到一个数组。 但是,当我这样做,它会覆盖整个数组与当前date被添加。 来源如下:

let startDate = new Date(2014, 0, 8, 19, 0, 0) let endDate = new Date(2014, 0, 11, 19, 0, 0) let datesToDownload = [] let datesInDB = [new Date(2014, 0, 8, 19, 0, 0), new Date(2014, 0, 9, 19, 0, 0), new Date(2014, 0, 10, 19, 0, 0), new Date(2014, 0, 8, 11, 0, 0)] for (let i = startDate; i <= endDate; i.setDate(i.getDate() + 1)) { console.log('CHECKING DATE: ' + i.toDateString()) if (!(datesInDB2.indexOf(i.toDateString()) >= 0)) { console.log('NEW RECORD FOUND FOR: ' + i.toDateString()) datesToDownload.push(i) console.log('i: ' + i) for (let j in datesToDownload) { console.log('element ' + j + ': ' + datesToDownload[j]) } } } 

输出如下所示:

 CHECKING DATE: Wed Jan 08 2014 NEW RECORD FOUND FOR: Wed Jan 03 2014 i: Wed Jan 08 2016 20:00:00 GMT-0400 (Eastern Daylight Time) element 0: Wed Jan 08 2016 20:00:00 GMT-0400 (Eastern Daylight Time) CHECKING DATE: Thur Jan 09 2016 NEW RECORD FOUND FOR: Thur Jan 09 2016 i: Thur Jan 09 2016 20:00:00 GMT-0400 (Eastern Daylight Time) element 0: Thur Jan 09 2016 20:00:00 GMT-0400 (Eastern Daylight Time) element 1: Thur Jan 09 2016 20:00:00 GMT-0400 (Eastern Daylight Time) CHECKING DATE: Fri Jan 10 2016 NEW RECORD FOUND FOR: Fri Jan 10 2016 i: Fri Jan 10 2016 20:00:00 GMT-0400 (Eastern Daylight Time) element 0: Fri Jan 10 2016 20:00:00 GMT-0400 (Eastern Daylight Time) element 1: Fri Jan 10 2016 20:00:00 GMT-0400 (Eastern Daylight Time) element 2: Fri Jan 10 2016 20:00:00 GMT-0400 (Eastern Daylight Time) ...... 

请注意,元素是否全部更改为正在插入的当前date,但正在添加元素。

为什么发生这种情况? 我怎样才能防止它?

您在每次迭代中将完全相同的Date实例推入数组中。 您可以创build一个副本

  datesToDownload.push(new Date(i)); 

date是一个对象,并通过引用传递。 在你的for循环中你正在改变date:

 for (let i = startDate; i <= endDate; i.setDate(i.getDate() + 1)) {