为何Date()变量被修改?如何规避该问题?
问题解答
为什么修改mySecondDate会影响myFirstDate?
在JavaScript中,Date是引用类型。当你执行mySecondDate = myFirstDate这类赋值时,并没有复制整个Date对象,只是把原对象在内存中的引用地址复制给了新变量。这就导致myFirstDate、mySecondDate、myThirdDate其实指向的是同一个内存对象——不管用哪个变量调用setHours(),都是在修改同一个对象,所以所有变量都会同步显示变化。
如何让myThirdDate保留myFirstDate的初始值,同时保持myFirstDate不变?
关键是要创建Date对象的独立副本,而不是直接复制引用。推荐两种可靠的方法:
方法一:利用Date构造函数创建副本
把原Date对象传入新的Date构造函数,会自动生成一个独立的新对象:// 初始化原日期 const myFirstDate = new Date(); // 直接创建初始值的副本给myThirdDate const myThirdDate = new Date(myFirstDate); // 临时变量也用副本,避免修改原对象 let mySecondDate = new Date(myFirstDate); // 修改临时变量的小时数,不会影响原对象和myThirdDate mySecondDate.setHours(0);方法二:通过时间戳创建副本
先用getTime()获取原对象的毫秒级时间戳,再用这个时间戳生成新的Date对象:const myFirstDate = new Date(); const myThirdDate = new Date(myFirstDate.getTime()); let mySecondDate = new Date(myFirstDate.getTime()); mySecondDate.setHours(0);
这样操作后,myFirstDate会保持最初的初始值,myThirdDate也和初始值完全一致,修改mySecondDate只会改变它自身。
内容的提问来源于stack exchange,提问作者Meeky333
相关产品推荐
相关产品推荐

