以下是我的JavaScript代码:
var enddate, finaldate, startyear, endyear, i;
startyear = 2010;
endyear = 2011;
enddate = new Date(endyear, 11, 31)
finaldate = new Date(enddate)
var a = [];
j = 0;
enddate.setDate(enddate.getDate() + 6)
for (i = new Date(startyear, 0, 1); i <= enddate; i.setDate(i.getDate() + 6)) {
if (i > finaldate) {
console.log(finaldate);
} else {
console.log("Value of i: " + i);
a.push(i);
console.log(a[j++]);
}
}
for (var k = 0; k <= a.length; k++) {
console.log(a[k])
}
语句console.log("Value of i: " +i);
在控制台中打印正确的值但是当我尝试在末尾打印数组a
的值时,它会将所有值都显示为 2012年1月9日星期一00 :00:00 GMT-0500(EST),无法理解为什么会发生这种情况。
答案 0 :(得分:1)
您需要在循环内创建一个新的日期对象。在javascript中对数组使用.push()
时,对象和数组将通过引用推送。像数字这样的内置类型被作为副本推送。
var enddate, finaldate, startyear, endyear, i;
startyear = 2010;
endyear = 2011;
enddate = new Date(endyear, 11, 31)
finaldate = new Date(enddate)
var a = [];
j = 0;
enddate.setDate(enddate.getDate() + 6)
for (i = new Date(startyear, 0, 1); i <= enddate; i.setDate(i.getDate() + 6)) {
if (i > finaldate) {
console.log(finaldate);
} else {
console.log("Value of i: " + i);
var m = new Date(i);
a.push(m);
console.log(a[j++]);
}
}
for (var k = 0; k <= a.length; k++) {
console.log(a[k])
}
答案 1 :(得分:1)
您可以在循环开始时创建一个日期对象,并在i
中存储对它的引用。
每次循环时,都会将该引用复制到数组中并修改日期对象的值。
最终会得到一个数组,其中包含对同一日期对象的一系列引用,这些对象设置为您设置的最终值。
每次循环时都需要创建一个新的日期对象。
e.g。
a.push(new Date(i));