我在我的代码中注意到了这种情况(不幸的是),并且能够在我自己的 JS 文件中复制它。所以我有这段代码:
var date1 = new Date(); // today
var date2 = date1;
date2 = date2.setDate(date2.getDate() + 1);
// what is date1?
这段代码执行后,date1就是今天+1!这让我想起了我的本科时代,当时我学习了指针,我想我有点生疏了。这就是这里发生的事情吗?显然,我已将分配从 date1 移开,并且只修改 date2,但 date1 正在更改。为什么会这样?
顺便说一句,在这段代码执行后,date2 是一个长数字,如 1272123603911。我假设这是日期中的秒数,但 date2 不应该仍然是 Date 对象吗? setDate() 应该返回一个 Date 对象。
最佳答案
引用类型与值类型的经典案例。
When the assignment operator works on primitive values (numbers, strings, Boolean, null, and undefined), a copy of the value is made. When the assignment operator works on JavaScript objects, references to the objects are copied.
Assignment by Value Versus Assignment by Reference
因此:
// creates a new Date object in memory with date1 as a Reference to its location
var date1 = new Date();
// date2 will now point to the same Object in memory as date1
var date2 = date1;
// Since both date1 and date2 point to the same object,
// modifying one changes the other
date2 = date2.setDate(date2.getDate() + 1);
至于结果值,你是对的。它在表达式内部被转换为自 Epoch 以来的秒数。
关于JavaScript 指针和日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2699916/