javascript - 分配和解包到一个数组到另一个数组之间的区别

标签 javascript arrays variable-assignment spread-syntax

我在 JavaScript 中有这段代码,A 行和 B 行有什么区别?

const arr1 = [1,2,3,4,5]

const arr2 = [...arr1]; // Line A
const arr2 = arr1;      // Line B

我想知道这两个作业是相同的还是有区别

最佳答案

它们是不同的。

const arr2 = [...arr1]; // Line A

第 A 行,将数组的每个元素复制(浅复制)到 arr2

const arr2 = arr1;      // Line B

第 B 行,将 arr1 的引用分配给 arr2。基本上,arr1arr2 是同一个数组。

示例

const arr = [1, 2, 3];

const arrA = [...arr];
const arrB = arr;

console.log(arr === arrA); // False
console.log(arr === arrB); // True

arrA[0] = 9;
console.log(arr[0] === arrA[0]); // False
console.log(arr); // [1,2,3]
console.log(arrA); // [9,2,3]

arrB[0] = 9;
console.log(arr[0] === arrB[0]); // True
console.log(arr); // [9,2,3]
console.log(arrB); // [9,2,3]

浅复制

浅复制仅复制第一级项目。例如,如果数组包含另一个数组,则复制内部数组,但不复制内部数组的元素。所以更深的元素不会被复制。请参阅下面的代码示例:

const arr = [1, 2, [5, 6]];

const arrA = [...arr];
const arrB = arr;

console.log(arr === arrA); // False
console.log(arr === arrB); // True

arrA[0] = 8;
arrA[2][0] = 9;
console.log(arr[2][0] === arrA[2][0]); // True
console.log(arr); // [1, 2, [9, 6]]
console.log(arrA); // [8, 2, [9, 6]]

arrB[0] = 8;
arrB[2][0] = 9;
console.log(arr[2][0] === arrB[2][0]); // True
console.log(arr); // [8, 2, [9, 6]]
console.log(arrB); // [8, 2, [9, 6]]

关于javascript - 分配和解包到一个数组到另一个数组之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76887661/

相关文章:

math - 变量的最大和最小约束

javascript - 是否可以获取div内所有<input>的所有值?

javascript - 查找并删除数组中匹配和对应的值

javascript - 范围内的冲突组件

arrays - 不同长度的VHDL常量字符串数组

python - 从 Julia 中另一个数组中的特定列获取子数组

python - "and"在变量赋值中的用例

c - 在 C 中,如果 B 是易变的,表达式 (void)(B = 1) 应该读作 B

javascript - 如何将带有 href 属性的元素与 React-router 结合使用?

javascript - 通过事件监听器打开/关闭传单图例