84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
所以我有這段JavaScript程式碼,Line A和Line B有什麼差別
const arr1 = [1,2,3,4,5] const arr2 = [...arr1]; // Line A const arr2 = arr1; // Line B
所以我想知道這兩種賦值方式是相同的還是有一些區別
它們是不同的。
const arr2 = [...arr1]; // Line A
LINE A,將陣列的每個元素複製(淺複製)到arr2中。
arr2
const arr2 = arr1; // Line B
LINE B,將arr1的引用賦值給arr2。基本上,arr1和arr2是同一個陣列。
arr1
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]]
它們是不同的。
LINE A,將陣列的每個元素複製(淺複製)到
arr2
中。LINE B,將
arr1
的引用賦值給arr2
。基本上,arr1
和arr2
是同一個陣列。範例
淺複製
淺複製只複製第一層項目。例如,如果數組包含另一個數組,則內部數組會被複製,但不會複製內部數組的元素。因此,深層元素不會被複製。請參閱下面的程式碼範例: