JavaScript修改Date变量时两个关联变量同时变更问题求解
问题原因
- JavaScript中的
Date属于引用类型,执行let a = d时,并没有创建新的Date实例,只是让变量a和d指向了内存中的同一个Date对象 - Date的
setDate()是可变方法,调用时会直接修改调用该方法的Date实例本身,同时返回修改后的时间戳。你代码中调用a.setDate()时,实际修改的是a和d共同指向的同一个实例,所以d的值也会同步变更
解决方案
要避免修改原对象,只需要在赋值时先克隆出一个独立的Date实例即可,正确代码如下:
<html> <script> const d= new Date(); console.log(d); // 基于d创建全新的Date对象,两个变量指向不同的实例 let a = new Date(d); a.setDate(a.getDate() + 2); console.log(a); console.log(d); </script> </html>
上述代码运行后会完全匹配你的预期输出,原变量d不会被修改。
内容的提问来源于stack exchange,提问作者Hiren Patel
相关产品推荐
相关产品推荐

