gpt4 book ai didi

javascript - 我对数组的理解缺少什么?

转载 作者:数据小太阳 更新时间:2023-10-29 04:06:02 25 4
gpt4 key购买 nike

当数组被分配给另一个变量时,传递的是引用而不是值。当您使用 == 运算符比较两个数组并返回 true

时,可以确认这一点
var a = [[1,2],[3,4],[5,6]];
var b = a; // b = [[1,2],[3,4],[5,6]]
var c = [].concat(a); // c = [[1,2],[3,4],[5,6]]

a == b; //true
a == c; //false

使用上述输入,当我修改数组 b 时,它会改变数组 a,但不会改变 c

b.push([7,8]); // b = [[1,2],[3,4],[5,6], [7,8]]
a; //a = [[1,2],[3,4],[5,6], [7,8]]
c; //c = [[1,2],[3,4],[5,6]]

但是当我执行以下操作时,它会改变 c

b[0].push(5); // b = [[1,2,5],[3,4],[5,6], [7,8]]
a; //a = [[1,2,5],[3,4],[5,6], [7,8]]
c; //c = [[1,2,5],[3,4],[5,6]]

为什么会这样?这种行为发生在使用改变数组的数组方法时。

最佳答案

.concat()做一个浅拷贝。所以在行之后:

var c = [].concat(a);

ca 引用不同的数组,但是 c[0]b[0]a[0] 都引用同一个数组。

引自MDN :

concat copies object references into the new array. Both the original and new array refer to the same object. That is, if a referenced object is modified, the changes are visible to both the new and original arrays.

关于javascript - 我对数组的理解缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30543928/

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