[英]is Javascript array.push method synchronous?
我正在編寫一個簡單的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原型上的所有setter函數都會使date實例發生變異。
您必須創建一個新的日期實例,然后再調用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);
}
}
在這里您有小提琴https://jsfiddle.net/ggqzbn6h/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.