Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript array.push方法是否同步?_Javascript - Fatal编程技术网

Javascript array.push方法是否同步?

Javascript array.push方法是否同步?,javascript,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 < endDat

我正在编写一个简单的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));
        }
    }
var startDate=新日期('2015-07-01 00:00+0800');
var endDate=新日期('2015-07-10 00:00+0800');
var arrayOfDates=[];
如果(结束日期>=开始日期){
while(开始日期<结束日期){
阵列日期推送(起始日期);
startDate=新日期(startDate.setDate(startDate.getDate()+1));
}
}
我希望阵列日期的结果是
[2015-07-012015-07-022015-07-03….,2015-07-10']
。结果是
[2015-07-022015-07-03….,2015-07-10']


为什么呢?在将变量推送到数组之前,
var startDate
是否会以某种方式更新?如果是这种情况,如何确保代码同步运行?

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

您必须创建一个新的日期实例,然后调用setter对其进行更改

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

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

您必须创建一个新的日期实例,然后调用setter对其进行更改

        startDate = new Date(startDate);
        startDate.setDate(startDate().getDate() + 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);
        }
    }
var startDate=新日期('2015-07-01 00:00');
var endDate=新日期('2015-07-10 00:00');
var arrayOfDates=[];
如果(结束日期>=开始日期){
对于(var dt=startDate;startDate

在这里,您可以使用fiddle,它将为您完成任务,在推送当前日期之前,它不会更改您的日期:

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);
        }
    }
var startDate=新日期('2015-07-01 00:00');
var endDate=新日期('2015-07-10 00:00');
var arrayOfDates=[];
如果(结束日期>=开始日期){
对于(var dt=startDate;startDate

这是你的小提琴

似乎很好,我得到了7月1日至7月9日(包括在内)。Firefox不理解这种时间格式。在我的浏览器中,
endDate>=startDate
的结果为false。要回答名义上的问题,可以。看看你真正的问题是什么。看起来很好。我得到7月1日至7月9日包括在内。Firefox不理解这种时间格式。在我的浏览器中,
endDate>=startDate
的结果为false。要回答名义上的问题,可以。查看您真正问题的答案。这将与OP中的代码有完全相同的问题。这将与OP中的代码有完全相同的问题。