为什么我的数组中的所有Date元素都是相同的日期
Why are all Date elements in my array the same date?
我对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:002016年1月1日,星期五00:00:002016年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;
}
对这个注释做一点更改:为什么我的数组中的所有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值也有点不正确,因为它来自变量名,所以不应该更改。我相信currentDate被认为是临时的,只是注意到了这一点。
相关文章:
- 如何使用jQuery按数据日期属性选择元素
- 如何检查日期选择器和时间选择器元素是否使用JQuery/Javascript设置
- 如何将日期和时间拆分为两个元素
- AUI日期选择器:如何访问当前元素
- 选择数据属性日期值早于当前服务器日期的元素
- 排列<p>使用jQuery按日期顺序排列的元素
- jquery在动态元素上调用日期选择器
- 棱角分明如何防止点击事件传播到日期选取器元素
- Javascript从某些元素中提取日期与匹配和正则表达式返回空数组
- 检查数组中元素的数据类型是否为日期对象的最简单方法
- JS代码以检查日期,如果包含该日期的元素满足条件,则突出显示该日期
- 如何使用 JavaScript 根据日期对元素进行排序
- jQuery 日期选择器不适用于动态插入的 html 元素
- 我可以让 jQuery UI 日期选择器元素在单击日期时不重置吗?
- 在 javascript 中计算具有特定日期的数组元素
- 使用日期循环 jquery 隐藏元素
- materializecss 日期选择器量角器(错误:元素在点处不可单击)
- 选择日期选择器的父元素
- 具有当前日期的元素的日期,并分配唯一ID
- 动态添加HTML5日期元素iOS Safari