是Javascript array.push方法同步?

时间:2015-07-21 16:37:50

标签: javascript

我正在编写一个简单的javascript函数,但它并不像我预期的那样。

以下是代码:

    var startDate = new Date('2015-07-01 00:00 +0800');
    var endDate = new Date('2015-07-10 00:00 +0800');
    var arrayOfDates = [];

    if (endDate >= startDate) {
        while (startDate < endDate) {
            arrayOfDates.push(startDate);
            startDate = new Date(startDate.setDate(startDate.getDate() + 1));
        }
    }

虽然我期待arrayOfDates的结果为[2015-07-01, 2015-07-02, 2015-07-03.... , 2015-07-10']。结果是[2015-07-02, 2015-07-03.... , 2015-07-10']

为什么?在将变量推送到数组之前,是否以某种方式更新了var startDate?如果是这样的话我怎样才能确保代码同步运行?

2 个答案:

答案 0 :(得分:4)

当您致电setDate()时,会更改日期。 Date原型上的所有setter函数都会改变日期实例。

您必须创建一个新的日期实例,然后再调用setter来更改它。

        startDate = new Date(startDate);
        startDate.setDate(startDate().getDate() + 1);

答案 1 :(得分:1)

它将为您完成工作,它不会改变您的日期,直到您推迟当前日期:

var startDate = new Date('2015-07-01 00:00');
    var endDate = new Date('2015-07-10 00:00');
    var arrayOfDates = [];

    if (endDate >= startDate) {
        for(var dt = startDate; startDate < endDate; dt = new Date(startDate.setDate(startDate.getDate() + 1))){
            console.log(startDate);
            arrayOfDates.push(startDate);
        }
    }

这里有小提琴https://jsfiddle.net/ggqzbn6h/