Bản sao nông và bản sao sâu là ngôn ngữ bất khả tri. Các bản sao cạn sao chép càng ít càng tốt. Bản sao cạn của bộ sưu tập là bản sao của cấu trúc bộ sưu tập, không phải các phần tử. Với một bản sao cạn, hai bộ sưu tập hiện chia sẻ các phần tử riêng lẻ.
Ví dụ
let innerObj = { a: 'b', c: 'd' } let obj = { x: "test", y: innerObj } // Create a shallow copy. let copyObj = Object.assign({}, obj); // Both copyObj and obj's prop y now refers to the same innerObj. Any changes to this will be reflected. innerObj.a = "test" console.log(obj) console.log(copyObj)
Đầu ra
{ x: 'test', y: { a: 'test', c: 'd' } } { x: 'test', y: { a: 'test', c: 'd' } }
Lưu ý rằng các bản sao cạn không tạo ra các bản sao một cách đệ quy. Nó chỉ thực hiện ở cấp cao nhất.
Bản sao sâu nhân bản mọi thứ. Bản sao sâu của bộ sưu tập là hai bộ sưu tập có tất cả các phần tử trong bộ sưu tập gốc được sao chép.
Ví dụ
let innerObj = { a: 'b', c: 'd' } let obj = { x: "test", y: innerObj } // Create a deep copy. let copyObj = JSON.parse(JSON.stringify(obj)) // Both copyObj and obj's prop y now refers to the same innerObj. Any changes to this will be reflected. innerObj.a = "test" console.log(obj) console.log(copyObj)
Đầu ra
{ x: 'test', y: { a: 'test', c: 'd' } } { x: 'test', y: { a: 'b', c: 'd' } }