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
相关产品推荐
相关产品推荐

