【问题标题】:reassigning javascript objects [duplicate]重新分配javascript对象[重复]
【发布时间】:2020-02-21 08:57:47
【问题描述】:

如果 javascript 对象是通过引用分配的,第二个 console.log 不应该显示 obj2 = {c:3}

let obj1 = {a:1}
let obj2 = {b:2}

obj2 = obj1
console.log(obj2) // {a:1}

obj1 = {c:3}
console.log(obj2)  // still {a:1}

【问题讨论】:

  • 不,更改obj1 指向的内容并不会神奇地更改obj2 指向的内容,而对obj2 的最后一次编辑使其指向与obj1 相同的内容分配时间,即{ a: 1 }

标签: javascript object pass-by-reference


【解决方案1】:

所以首先你有这个(两个引用都指向同一个对象):

obj1 => {a:1} <= obj2

当你做obj1 = {c:3}时,你做了两件事:

  • 断开连接obj1 =x=&gt; {a:1}
  • 创建新连接obj1 =&gt; {c:3}

注意obj2不变(还是指向同一个东西):obj2 =&gt; {a:1}

所以console.log(obj2) 仍然应该是 = {a:1}

【讨论】:

    【解决方案2】:

    简而言之,变量引用改变了,但内存地址没有改变:

    【讨论】:

    • 那么在这种情况下我们如何改变 obj1 呢?
    • obj1 已通过重新分配更改:obj1 = {c:3}
    • 哦,是的,我读错了代码。我以为最后一个是ojb1是用控制台写的
    猜你喜欢
    • 1970-01-01
    • 2021-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多