gpt4 book ai didi

Javascript双向引用问题

转载 作者:行者123 更新时间:2023-11-29 10:02:30 25 4
gpt4 key购买 nike

我对 Javascript 引用感到很困惑。我了解在引用对象时会进行引用。更改父项会更改副本,反之亦然。

令我感到困惑的是,当对父项进行重新分配更改时,副本会保留所有内容。看我的例子

let tester = {
"hello": "how are you",
"myArrayHere": [
{ "id": 1, "name": "me" },
{ "id": 2, "name": "you" },
{ "id": 3, "name": "them" },
]
};

var something = tester.myArrayHere.find(x => x.name === "you");

console.log(something);
console.log("--------");

something.id = 99;
console.log(something);
console.log("--------");

console.log(tester.myArrayHere[1]);
console.log("--------");

tester.myArrayHere[1].id = 88;

console.log(something);
console.log("--------");

tester.myArrayHere[1] = {};
console.log(tester.myArrayHere[1]);
console.log("--------");

console.log(something)

如果你运行那个例子,最后一行的 something 仍然有整个对象,即使上面两行,它的引用被重新分配。

还有其他这样的例子,比如当你从父级删除东西时,等等。如果这纯粹是一个引用而不是一个副本(比如原始类型),为什么这些改变没有影响它?

最佳答案

something 变量只是指存储在内存中的(预定义)对象。它的值是 Array#find 方法的返回值(对对象的引用)。变量不观察任何特定路径(例如 tester.myArrayHere[1]),它们不是观察者。换句话说,在这种情况下,JavaScript 解释器不关心/记住您在赋值之前如何获取对象/值。

> var a, b; a = b = {};
> a === b
true
> a = {}
> a === b
false

执行 tester.myArrayHere[1] = {}; 后,数组的第二个元素引用 一个新对象something 变量仍然引用 旧对象

关于Javascript双向引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52622896/

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