我在 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/