You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

while循环中日期递增异常:数组所有对象的data_ass均为最后递增日期

问题原因

这是JavaScript 引用类型 赋值的典型特性导致的问题:

  • Date属于引用类型,代码中assTemp.data_ass = date1的操作并没有拷贝date1的实际值,只是把date1对象的内存引用赋值给了data_ass字段
  • 所有存入数组的assenza实例的data_ass都指向内存中同一个date1对象,每次循环末尾执行date1.setDate(date1.getDate() + 1)修改的是这个共享对象的值,最终所有数组元素读取到的都是最后一次修改后的日期值
  • 循环内直接打印date1能看到正常递增,是因为打印的是修改前的瞬时值,没有被后续操作覆盖
修复方案

赋值时创建当前date1的独立副本即可,将assTemp.data_ass = date1修改为:

assTemp.data_ass = new Date(date1)

每次赋值都会生成全新的Date对象,后续修改原date1不会影响已经存入数组的日期值。

另外你的代码存在冗余逻辑:每次循环中你两次执行var assTemp = new assenza(),第二次创建的实例完全没有被使用,可以直接删除该行冗余代码。

内容的提问来源于stack exchange,提问作者pietro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:15:05