Theo tài liệu MDN, hãy gọi array.slice()
sẽ tạo bản sao nông của mảng.Sự khác biệt giữa bản sao nông và bản sao sâu với các mảng JavaScript là gì?
Xem điều này MDN link for slice().
Tuy nhiên, nếu tôi chạy một thử nghiệm đơn giản như vậy trong giao diện điều khiển:
var test = [[1,2,3],7,8,9];
var shallow_copy = test.slice();
và kiểm tra shallow_copy, tôi có thể thấy rằng toàn bộ 2 mảng chiều dường như được sao chép.
Sự khác nhau giữa bản sao nông và bản sao sâu? Nếu tôi đoán, tôi sẽ gọi đây là một bản sao sâu.
Nó có nghĩa là 'test [0] === shallow_copy [0]', chúng tham chiếu đến cùng một đối tượng mảng. – Bergi
Tôi thấy việc sử dụng từ 'nông' và 'sâu' hoàn toàn khó hiểu trong tài liệu JavaScript vì nó đã được nói rằng các đối tượng không bao giờ được sao chép. Khi nó rõ ràng đọc 'nông' tôi mong đợi tất cả các yếu tố được tham chiếu đến cùng một điều (bao gồm cả các đối tượng không như số), nhưng nó chỉ áp dụng cho các đối tượng, đã được tuyên bố không bao giờ được sao chép. – destoryer