Skip to content

Sự khác nhau giữa Object.freeze() và Object.seal()

Vien Huynh
Posted on:October 30, 2023 at 06:23 PM

Trong khi làm việc với object thì chúng ta có thể thêm sửa xoá. Vậy trong trường hợp chúng ta muốn ngăn chặn các hành động đó. Chúng ta phải làm như thế nào?

Table of contents

Open Table of contents

Object.freeze()

Object.freeze() đóng băng một object chúng ta muốn. Điều đó có nghĩa là một khi chúng ta sử dụng thuộc tính này cho một object thì object này không thể add mới một phần tử, các bạn xem ví dụ sau:

const user = {
  name: "Vien Huynh",
  age: 20,
  workExperience: {
    2022: "GDSC-DUT",
    2023: "Smart Food",
  },
};
// use freeze()
Object.freeze(user);
// Cập nhập tên
user.name = "Nguyen Van A"; //Không hoạt động

Bởi vì chúng ta đã freeze Object user. Nên chúng ta không thể thay đổi thuộc tính name. Tuy nhiên nếu chúng ta thay đổi thuộc tính trong workExperience thì điều gì sẽ xảy ra?

user.workExperience["2022"] = "DSC";

console.log(user);
/*
1.  age:  20
2.  workExperience:  {2022:  'DSC',  2023:  'Smart Food'}
3.  name:  "Vien Huynh"
*/

Vậy là chúng ta vẫn có thể sửa được thuộc tính bên trong workExperience. Có nghĩa là Object.freeze() chỉ có tác dụng ở các thuộc tính cao nhất của object. Còn các thuộc tính lồng nhau vẫn bị thay đổi

Object.seal()

Tiếp theo là method Object.seal(). Method này cho phép một object có thể update một thuộc tính nhưng không thể thêm hay xoá

const user = {
  name: "Vien Huynh",
  age: 20,
  workExperience: {
    2022: "GDSC-DUT",
    2023: "Smart Food",
  },
};
// use seal()
Object.seal(user);
// Cập nhập tên
user.name = "Nguyen Van A"; // Hoạt động bình thường

user.newName = "Hoang Vien"; //Không hoạt động
delete user.age; //Không hoạt động

Kết luận

Trong bài viết này, chúng ta đã tìm hiểu về cách ngăn chặn các hành động thêm, sửa, và xoá trong JavaScript khi làm việc với đối tượng (objects). Chúng ta đã thảo luận về hai phương pháp chính để thực hiện điều này: Object.freeze() và Object.seal().

  • Object.freeze(): Phương pháp này đóng băng (freeze) một đối tượng, khiến cho nó không thể thay đổi. Khi chúng ta sử dụng Object.freeze() cho một đối tượng, không thể thêm mới thuộc tính hoặc thay đổi giá trị của các thuộc tính hiện có ở cấp cao nhất của đối tượng. Tuy nhiên, các thuộc tính lồng nhau bên trong đối tượng vẫn có thể thay đổi.

  • Object.seal(): Phương pháp này cho phép chúng ta thay đổi giá trị của các thuộc tính hiện có của đối tượng, nhưng không thể thêm mới thuộc tính hoặc xoá bất kỳ thuộc tính nào. Nó cho phép chúng ta “niêm phong” đối tượng, đảm bảo rằng cấu trúc của đối tượng không thay đổi.

Tùy thuộc vào nhu cầu cụ thể của dự án, chúng ta có thể lựa chọn sử dụng Object.freeze() hoặc Object.seal() để kiểm soát quyền truy cập và sửa đổi dữ liệu trong đối tượng. Điều này có thể hữu ích trong các trường hợp cần đảm bảo tính nhất quán và an toàn của dữ liệu.


Có thể bạn sẽ thích: