为啥我的变量“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 是按值传递的,为啥我的对象在执行方法后会发生变化?

为啥模型的准确性会发生变化?

为啥当我追加到其中的列表时,元组的内容会发生变化,但在更新变量时不会发生变化?

为啥我的原始列表发生了变化?

我的 Redux 状态发生了变化,为啥 React 没有触发重新渲染?

为啥 svg 图片的字体系列会发生变化?