用日期填充数组

Dan*_*olo 2 javascript arrays byref

真的不明白为什么我推入数组的日期不是我在控制台中调用数组时出现的日期.即我期望数组中的第一个条目是今天的日期,这是两个警报调用返回的,但是当我检查数组的第一个位置时,它具有昨天的日期!?

function sevenDayPeriod(date) {

    for (var i = 0; i <=6; i++) {

        alert(date);    //check to see date is today's date
        dateRange[i] = date;
        alert(dateRange[i]);    //confirm that what I've pushed to array is today's date

        date = date.setDate(date.getDate() - 1);
        date = new Date(date);
    }
};

var dateRange = [];
var today  = new Date();

sevenDayPeriod(today);
Run Code Online (Sandbox Code Playgroud)

谢谢

DAX*_*lic 6

...
dateRange[i] = date;
alert(dateRange[i]);    //confirm that what I've pushed to array is today's date
date = date.setDate(date.getDate() - 1);
...
Run Code Online (Sandbox Code Playgroud)

在上面第一行中,您将第i个数组元素设置为date(引用),然后显示它,然后更改setDate导致问题的相同对象,因为数组元素仍然指向该修改对象.
你可以解决这个问题,例如使用另一个var

...
var prevDay = new Date();
prevDay.setDate(date.getDate() - 1);
date = prevDay;
...  
Run Code Online (Sandbox Code Playgroud)

或者在将其推入阵列之前创建它的副本

  • 感谢您的解释.具有完美的意义,希望我能从中学到一些东西! (3认同)