javascript - 将 Moment JS 对象设置为新变量时更新它们

标签 javascript jquery momentjs

这是一直让我困惑的事情,我想是时候我开始思考这个问题了,所以有人可以向我解释一下它以及如何解决它吗?

好的,所以我使用 moment JS 创建一个时间对象,就像这样

var startOfDiscount = moment('24/07/2018', "DD/MM/YYYY");

为什么当我尝试像这样基于我的 startOfDiscount 对象创建一个新变量时

var endOfDiscount = startOfDiscount.add(6, 'months').endOf('month');

这就是将我的 startOfDiscount 对象更改为?我知道 startOfDiscount.add(1, 'months').endOf('month') 行正在操作实际的 startOfDiscount 对象,但我该怎么做它只是为了我的新变量的目的而操作/更改,而原始变量保持不变?

如果我跑了

console.log(startOfDiscount);
console.log(endOfDiscount);

它们都打印相同的日期?

当我尝试使用它来声明一个新对象/变量时,为什么 javascript 会更改原始对象/变量。我该如何做才能使对原始对象的更改仅用于设置新变量?

这是我一直无法理解为什么会发生以及如何预防它的事情。有人可以解释为什么会这样做以及如何防止它吗?

最佳答案

你说得对,它改变了原来的内容,尽管这是设计使然。这是documentation的链接

Mutates the original moment by adding time.

var startOfDiscount = moment('24/07/2018', "DD/MM/YYYY");
var endOfDiscount = startOfDiscount.add(6, 'months').endOf('month');

console.log(startOfDiscount);
console.log(endOfDiscount);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

如果你想基于旧变量创建一个新变量,你首先必须 clone它。

Create a clone of a duration. Durations are mutable, just like moment objects, so this lets you get a snapshot, at some point in time.

var startOfDiscount = moment('24/07/2018', "DD/MM/YYYY");
var endOfDiscount = startOfDiscount.clone().add(6, 'months').endOf('month');

console.log(startOfDiscount);
console.log(endOfDiscount);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

我希望这是有道理的。一般来说,对于像这样的大型库,文档非常好并且值得一读。

https://momentjs.com/docs/

关于javascript - 将 Moment JS 对象设置为新变量时更新它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51497420/

相关文章:

javascript - 使用 javascript 在多个跨度上操作 css

javascript - 减小 div 及其所有内容的大小以适合较小的 div jquery 和 php

javascript - 有没有一种方法可以使用多个关键事件

javascript - 振荡器的网络音频 FFT?

javascript - 是否有跨浏览器的方法来抑制大多数输入字段的输入?

javascript - Jquery如何使用momentjs翻译文本日期

momentjs - 使用momentjs检查一天是否是同一天(但不是同一年)

momentjs - 如何防止带时间刻度的图表中的第一个/最后一个柱被切断

javascript - 将 javascript 属性传递给 javascript 函数

jquery - 尝试触发影响子元素的函数,有点像