javascript - Javascript array.push 方法是同步的吗?

标签 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 ?如果是这种情况,我如何确保代码同步运行?

最佳答案

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

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

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

关于javascript - Javascript array.push 方法是同步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31544823/

相关文章:

javascript - Div 样式未定义(Javascript)

javascript - 卡住 jquery 加载上最后查看的位置

JavaScript 伪随机序列生成器

javascript - 使用 javascript 按特定顺序创建新数组

javascript - ejs.filters 不工作

javascript - 一些延迟加载背景图像(b-lazy)没有显示在光滑的轮播中

javascript - 在 JavaScript 中创建删除按钮以删除购物 list 项目

javascript - 如何根据 typescript 中的键对对象数组进行排序

c# - 如何只刷新 HTML 页面的特定部分?

javascript - Electron v1.7 : Close, 最大化和最大化