我对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;
}
这会以我所有日期的最后一个值结束:
2016年1月1日星期五00:00:00,2016年1月1日星期五00:00:00,2016年1月1日星期五 00:00:00,Fri Jan 01 2016 00:00:00,Fri Jan 01 2016 00:00:00,Fri Jan 01 2016 00:00:00
为什么会这样?
答案 0 :(得分:0)
您没有将日期添加到数组中,而是对日期进行参考。然后,如果更新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;
}
答案 1 :(得分:0)
对此评论稍作修改:Why are all Date elements in my array the same date?
function myFunction() {
// Using variables definition pattern
var todayDate = new Date(),
firstDay = new Date(todayDate.getFullYear(), todayDate.getMonth(), 1),
lastDay = new Date(todayDate.getFullYear(), todayDate.getMonth() + 1, 0),
currentDate = firstDay,
testDates=[];
// Change firstDay to currentDate in comparison part of the loop
while (currentDate <= lastDay) {
testDates.push( new Date(currentDate.getTime()) );
// Also change firstDay to currentDate because it's a temporary
// variable used to perform calculations and moving through
// values
currentDate.setDate(currentDate.getDate() + 1);
}
document.getElementById("demo").innerHTML = testDates;
}
1)变量定义模式允许您以变得更容易阅读代码的方式对变量的定义进行分组(查看内容); 2)在原始代码中这一行 var currentDate = firstDay; 除了声明一个在任何地方都没有使用的变量之外什么也不做。更改firstDay值也有点不正确,因为它来自变量名称,它不应该更改。我相信currentDate被用作临时用途,只是注意到了。