gpt4 book ai didi

javascript - moment().add 更改先前设置的变量

转载 作者:行者123 更新时间:2023-12-01 02:16:20 25 4
gpt4 key购买 nike

当我向函数传递日期时,我有一个函数应该返回两个变量:thisYearnextYear。但是,当我在 date 上调用 .add 时,它会更改 thisYear 的值,即使已经设置了 thisYear

函数和调用

http://jsfiddle.net/rLjQx/29945/

var someDate = moment()
thisYearAndNextYear(someDate)

function thisYearAndNextYear(date) {
const thisYear = date
console.log("thisYear = " + thisYear);
const nextYear = date.add(1, 'year')
console.log("nextYear = " + nextYear);
console.log("thisYear (after nextYear set) = " + thisYear);
}

输出

thisYear = 1522021438255
nextYear = 1553557438255
thisYear (after nextYear set) = 1553557438255 // ISSUE: this should still be 1522021438255

有人知道如何防止这种奇怪的行为,以便 thisYear 保留其初始值吗?

最佳答案

对象通过引用传递。当您将引用对象的变量传递给函数时,该函数仍然会获取对原始对象的引用。您可以这样想:非基元(例如对象)的变量引用内存地址,并且这些内存地址被传递。

因此,当您对 moment 对象调用 add 时,该对象就会发生变化。

如果您想克隆 moment 对象,以便可以对其副本进行操作:

https://momentjs.com/docs/#/parsing/moment-clone/

调用.clone()方法。

const nextYear = date.clone();
nextYear.add(1, 'year')

关于javascript - moment().add 更改先前设置的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49482200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com