为啥我的变量“c”发生了变化?
Posted
技术标签:
【中文标题】为啥我的变量“c”发生了变化?【英文标题】:Why my variable "c" has changed?为什么我的变量“c”发生了变化? 【发布时间】:2016-01-27 04:43:34 【问题描述】:var c = new Date(2015, 11, 25);
var d = c;
d.setFullYear(2000);
console.log(c);
console.log(d);
//为什么我的变量“c”在这段代码中发生了变化?
【问题讨论】:
【参考方案1】:第 1 行:创建一个日期对象并将对它的引用分配给 c
。
第 2 行:将 c
(对日期对象的引用)的值复制到 d
第 3 行:您修改日期对象。它仍然被两个变量引用。
如果您想创建一个新的日期对象并将其分配给d
,那么您需要明确地这样做。
var c = new Date(2015, 11, 25);
var d = new Date(c);
d.setFullYear(2000);
console.log(c);
console.log(d);
【讨论】:
嗯,这些年来,我从来没有想过在制作副本时只传递整个日期实例 :)【参考方案2】:变量c
没有改变。改变的是 c
所指的对象,即 Date 实例。在将c
的值分配给d
之后,both 变量引用同一个 Date 实例。两个变量,一个对象。
您可以像这样复制 Date 实例:
var c = new Date(2015, 11, 25);
var d = new Date(+c);
或者更明确
var d = new Date(c.getTime());
【讨论】:
是否只适用于 date() 方法? @DragomirMandic 对于任何可以更改的对象也是如此。这是 javascript 中对象和对象引用的一般工作方式。以上是关于为啥我的变量“c”发生了变化?的主要内容,如果未能解决你的问题,请参考以下文章
如果 java 是按值传递的,为啥我的对象在执行方法后会发生变化?
为啥当我追加到其中的列表时,元组的内容会发生变化,但在更新变量时不会发生变化?