如何为新变量赋值日期并保持原日期变量恒定?
问题根源
在JavaScript中,Date属于引用类型,当你直接把todayDate赋值给其他变量时,并没有复制整个日期对象,只是传递了对象的内存地址。这意味着todayDate、yesterdayDate、next30daysDate其实指向同一个内存中的Date实例,修改任何一个变量的日期值,都会同步影响所有指向该实例的变量。
解决方案
要保持todayDate恒定,你需要为每个新变量创建原Date对象的独立副本,常用方法如下:
方法1:利用Date构造函数复制
直接将原Date对象传入新的Date()构造函数,会生成一个全新的Date实例:
var todayDate = new Date(); // 创建todayDate的独立副本 var yesterdayDate = new Date(todayDate); yesterdayDate.setDate(yesterdayDate.getDate() - 1); // 再次创建todayDate的独立副本 var next30daysDate = new Date(todayDate); next30daysDate.setDate(next30daysDate.getDate() + 29);
方法2:通过时间戳复制
调用原Date对象的getTime()方法获取毫秒级时间戳,再用这个数值创建新的Date对象:
var todayDate = new Date(); var yesterdayDate = new Date(todayDate.getTime()); yesterdayDate.setDate(yesterdayDate.getDate() - 1); var next30daysDate = new Date(todayDate.getTime()); next30daysDate.setDate(next30daysDate.getDate() + 29);
方法3:ES6扩展运算符(环境支持时可用)
如果你的运行环境支持ES6语法,可以用扩展运算符快速创建副本:
const todayDate = new Date(); const yesterdayDate = new Date(...todayDate); yesterdayDate.setDate(yesterdayDate.getDate() - 1); const next30daysDate = new Date(...todayDate); next30daysDate.setDate(next30daysDate.getDate() + 29);
以上方法都会让新变量指向独立的Date实例,修改它们的值不会再影响todayDate。
内容的提问来源于stack exchange,提问作者Somasekhar
相关产品推荐
相关产品推荐

