Object/array là kiểu tham chiếu; gán b = a chỉ chép tham chiếu, sửa b là sửa luôn a.
- Shallow copy: sao chép một cấp; property lồng bên trong vẫn dùng chung tham chiếu.
- Cách:
{ ...obj },Object.assign({}, obj),arr.slice(),[...arr]. - Đủ khi dữ liệu phẳng (thường gặp khi cập nhật state bất biến trong React).
- Deep copy: sao chép đệ quy mọi cấp, hoàn toàn tách biệt.
structuredClone(obj)— API chuẩn, xử lý đượcDate,Map,Set, vòng tham chiếu.JSON.parse(JSON.stringify(obj))— nhanh gọn nhưng mấtundefined,function,Date(thành string), và ném lỗi khi gặp vòng tham chiếu (circular reference).
Chọn: state phẳng → shallow (nhanh, đủ); cấu trúc lồng sâu → structuredClone.