Array là object
Array trong JavaScript là object. Do đó, cần chú ý hành vi khi so sánh và copy.
So sánh array
Dù nội dung array giống nhau, nếu instance của object khác nhau thì không thể so sánh như mong đợi bằng ==.
tsconstlist1 = [1, 2, 3];constlist2 = [1, 2, 3];console .log (list1 ==list2 );
tsconstlist1 = [1, 2, 3];constlist2 = [1, 2, 3];console .log (list1 ==list2 );
Trong PHP có thể so sánh bằng nhau với array (indexed array) dựa trên nội dung phần tử, nhưng JavaScript không làm được như vậy.
php<?php$list1 = [1, 2, 3];$list2 = [1, 2, 3];var_dump($list1 === $list2); //=> bool(true)
php<?php$list1 = [1, 2, 3];$list2 = [1, 2, 3];var_dump($list1 === $list2); //=> bool(true)
JavaScript không có operator hay method để so sánh nội dung array, nên khi muốn so sánh nội dung, khuyến nghị sử dụng package như isEqual của lodash.
Copy array
Giống như các object khác, việc gán array không tạo ra bản copy của giá trị. Biến gán và biến được gán đều trỏ đến cùng một giá trị. Và khi thay đổi một biến, biến còn lại cũng bị ảnh hưởng.
tsconstarr = [1, 2, 3];constbackup =arr ;arr .push (4); // Thay đổiconsole .log (arr );console .log (backup ); // Cũng bị ảnh hưởng
tsconstarr = [1, 2, 3];constbackup =arr ;arr .push (4); // Thay đổiconsole .log (arr );console .log (backup ); // Cũng bị ảnh hưởng
Để copy array đơn giản như trên, hãy sử dụng spread syntax.
tsconstarr = [1, 2, 3];constbackup = [...arr ]; // Spread syntaxarr .push (4); // Thay đổiconsole .log (backup ); // Không bị ảnh hưởng
tsconstarr = [1, 2, 3];constbackup = [...arr ]; // Spread syntaxarr .push (4); // Thay đổiconsole .log (backup ); // Không bị ảnh hưởng
📄️ Spread syntax của array "..."
Trong JavaScript, với array có thể sử dụng spread syntax "..." để triển khai các phần tử.