我在 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
。基本上,arr1
和 arr2
是同一个数组。
示例
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/