javascript - 为什么我的数组中的所有日期元素都是相同的日期?

标签 javascript while-loop

我在 Javascript 方面遇到了一个非常奇怪的问题。我试图循环遍历我的日期以进行一些检查并向我的数组添加值,但是当我返回数组时,它会显示我的所有集合以及最后一个值。下面是我的代码:

function myFunction() {
    var todayDate = new Date();
    var firstDay = new Date(todayDate.getFullYear(), todayDate.getMonth(), 1);
    var lastDay = new Date(todayDate.getFullYear(), todayDate.getMonth() + 1, 0);
    var testDates=[];

        while (firstDay <= lastDay) {
            var currentDate = firstDay;

            testDates.push( firstDay);

            firstDay.setDate(firstDay.getDate() + 1);
        }

    document.getElementById("demo").innerHTML = testDates;
}

这最终得到我所有日期的最后一个值:

Fri Jan 01 2016 00:00:00,Fri Jan 01 2016 00:00:00,Fri Jan 01 2016 00:00:00,Fri Jan 01 2016 00:00:00,Fri Jan 01 2016 00:00:00,Fri Jan 01 2016 00:00:00

为什么会发生这种情况?

最佳答案

您不是将日期添加到数组中,而是添加对日期的引用。然后,如果您更新 firstDay,则会更新数组中所有元素的日期。 (因为它们都指向同一日期)。尝试像这样克隆日期:

function myFunction() {
    var todayDate = new Date();
    var firstDay = new Date(todayDate.getFullYear(), todayDate.getMonth(), 1);
    var lastDay = new Date(todayDate.getFullYear(), todayDate.getMonth() + 1, 0);
    var testDates=[];

    while (firstDay <= lastDay) {
        var currentDate = firstDay;

        testDates.push( new Date(firstDay.getTime()) );

        firstDay.setDate(firstDay.getDate() + 1);
    }

    document.getElementById("demo").innerHTML = testDates;
}

关于javascript - 为什么我的数组中的所有日期元素都是相同的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34411372/

相关文章:

javascript - javascript slider 数组问题

javascript - 如何在 Python 中使用 Selenium 从 JS 提示符中获取 Int

c - C 中的 while 循环无论条件如何都会执行

php - 图像与文件夹取消链接,但无法从数据库列中删除

javascript - 在 while 循环内声明变量 javascript

php - 阵列运行不正常

javascript - 如何知道angular完成了所有的处理和渲染

javascript - Angular (表单数组)值更改不起作用

javascript - 引用错误 : d3 is not defined. 未引用脚本

java - projecteuler-3 质因数除法中的 if vs while 循环