JavaScript 指针和日期

标签 javascript date pointers

我在我的代码中注意到了这种情况(不幸的是),并且能够在我自己的 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/

相关文章:

c - scanf 到结构中的字段的问题

javascript - 动态匿名 js 函数不起作用

javascript - 使用 jquery ajax 和 php 时确实很奇怪的错误

sql - 数据库中的日期格式在 vb.net 中获取错误的日期

php - 如何使用 PHP 获取当前年份?

c# - List<T> 是指针吗?

javascript - 使用 webpack 将第三方脚本导入 React/Redux 应用程序

javascript - ng-model 未使用 $setViewValue 进行更新(采用 jquery-ui 自动完成)

python - Pandas : date as year, 月份 ... 在日期时间的分隔列中

c++ - const char& 作为函数的参数