【问题标题】:Both variable value getting changed while updating value of second variable更新第二个变量的值时,两个变量的值都发生了变化
【发布时间】:2021-10-25 13:45:15
【问题描述】:

我已经实现了操纵日期,但我得到低于输出。您能否解释一下为什么会发生这种情况并为此提供解决方案。

HTML:

<html>
<script>
        const d= new Date();
        console.log(d);
        let a=d;
        a =new Date(a.setDate(d.getDate() + 2));
        console.log(a);
        console.log(d);
</script>
</html>

输出:

Wed Aug 25 2021 17:23:00 GMT+0530 (India Standard Time)
Fri Aug 27 2021 17:23:00 GMT+0530 (India Standard Time)
Fri Aug 27 2021 17:23:00 GMT+0530 (India Standard Time)

预期输出:

Wed Aug 25 2021 17:23:00 GMT+0530 (India Standard Time)
Fri Aug 27 2021 17:23:00 GMT+0530 (India Standard Time)
Wed Aug 25 2021 17:23:00 GMT+0530 (India Standard Time)

谢谢。

【问题讨论】:

  • setDate 改变日期对象
  • 我将 setDate 与对象 a 一起使用,而不是与 d 一起使用。那么为什么 d 会发生变化。
  • 因为a 只是在您执行let a=d; 之后对d 的引用
  • 而且你在我的评论之后编辑了你的代码!你打电话给d.setDate

标签: javascript html date datetime object


【解决方案1】:

你写了 a=d,所以两者的值相同。

试试

<script>
        const d= new Date();
        console.log(d);
        var a = new Date(d);
        a.setDate(d.getDate() + 2);
        console.log(a);
        console.log(d);
</script>

希望它会起作用,仍然遇到任何问题请高我,我会为你写文章

codingvila.com

有详细的解释。

【讨论】:

  • 但之后我只更改了 a 的值。那么为什么 d 的值被改变了。
  • 亲爱的 Hiren,普通的 JavaScript 没有像 typescript 那样遵循面向对象编程概念的概念,所以在你的情况下,你的常量变量 d 将它们的值存储到变量 a,而你的 a 变量只需添加 2 天相同的对象,因此最终您的对象对于 a 和 d 都是相同的,因此当您更改对象中的值时,它将反映所有相关的价值,我在那里更改了我的答案。如果它适合你,请接受它。
【解决方案2】:

在 javascript 中,当您为包含和对象的变量赋值时,您不会通过将引用传递给初始对象来创建该变量的副本。最后,您将只有两个变量都存储对同一对象的引用。

由于两者都引用同一个对象,当您更新其中一个对象时,它将更新它们的引用,这将导致指向同一引用的其他变量的更新。

如果你想复制你可以依靠Object.assign

【讨论】:

  • object.assign 不会为 Date 对象创建新的 Date 实例,它只是复制自己的可枚举属性,而不是 Date 实例的特殊属性,例如内部时间值。复制日期应该像 let date2 = new Date(+date1) 那样完成。
【解决方案3】:

表达式d.setDate(d.getDate() + 2) 更改 d 的值。不要这样做,而是从d 的基值创建a,然后修改a

    let a = new Date(d);
    a.setDate(a.getDate() + 2));

【讨论】:

    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    相关资源
    最近更新 更多