JavaScript có 7 kiểu primitive (string, number, boolean, undefined, null, symbol, bigint) và kiểu reference — object, array, function.
- Copy: gán primitive sang biến khác là sao chép giá trị — hai biến độc lập. Gán object chỉ sao chép tham chiếu — hai biến trỏ cùng một object.
- So sánh: primitive so sánh theo giá trị (
'a' === 'a'→true); object so sánh theo danh tính tham chiếu ({} === {}→falsevì là hai object khác nhau). - Mutation: primitive bất biến — mọi thao tác chuỗi/số tạo giá trị mới. Object sửa qua một tham chiếu thì mọi tham chiếu khác đều thấy thay đổi — nguồn bug thường gặp khi truyền object vào hàm rồi hàm sửa lên nó.
Hệ quả thực tế: gán biến không bao giờ tạo bản sao độc lập — muốn tách hẳn phải clone (xem câu shallow vs deep copy).