gpt4 book ai didi

javascript - 数组赋值是否创建新引用

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

我遇到了以下情况。我正在初始化一个数组,并将其分配给一个对象的属性。

var arr = [1,2,3,4,5];
var obj = { 'numbers': arr };

我知道我将对我的数组 arr 的引用传递给了我的对象 obj。所以我可以执行以下操作:

arr.push(6);
console.log(obj);

将按预期显示以下内容:

{ numbers: [ 1, 2, 3, 4, 5, 6] }

现在是意想不到的部分。 arr 的值通过外部事件更改,我希望 obj.numbers 的值同时更改。但它不会:

arr = [0,0,0,0,0];
console.log(arr);
console.log(obj);
arr --> [0,0,0,0,0]
obj --> { numbers: [ 1, 2, 3, 4, 5, 6] }

所以我的 arr 变量的值改变了,但我的 obj 变量中的 numbers 属性没有改变。

所以,我唯一的解释是,一旦你对数组进行赋值,你就打破了旧的引用并创建了一个新的引用。是这样吗?

我如何将我的新值 [0,0,0,0,0] 分配给我的 arr 变量和 obj.numbers(同时)?

最佳答案

是的,使用 = 的赋值会创建一个新引用并删除旧引用。要解决这个问题:

  var arr = [1, 2, 3, 4, 5];
var obj = { 'numbers': arr };
console.log(arr === obj.numbers); // -> true

arr.length = 0;
var newArr = [0, 0, 0, 0, 0];
arr.push(...newArr);
console.log(arr === obj.numbers); // -> true
console.log(arr); // -> [0, 0, 0, 0, 0]

将长度设置为 0 会清除数组。当您将项目插入一个数组时,它不会创建一个新数组,因此您会看到 arrobj 都发生了变化。

关于javascript - 数组赋值是否创建新引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44397580/

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