P粉1871608832023-08-14 11:43:19
它們是不同的。
const arr2 = [...arr1]; // Line A
LINE A,將陣列的每個元素複製(淺複製)到arr2
中。
const arr2 = arr1; // Line B
LINE 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]]