Rumah >hujung hadapan web >tutorial js >Menguasai Object.freeze() dan Object.seal() dalam JavaScript: Mengawal Kebolehubahan Objek

Menguasai Object.freeze() dan Object.seal() dalam JavaScript: Mengawal Kebolehubahan Objek

Barbara Streisand
Barbara Streisandasal
2024-12-28 17:58:18368semak imbas

Mastering Object.freeze() and Object.seal() in JavaScript: Controlling Object Mutability

Object.freeze dan Object.seal dalam JavaScript

Apabila bekerja dengan objek dalam JavaScript, mengawal kebolehubahannya adalah penting untuk mengelakkan perubahan yang tidak diingini. Dua kaedah yang disediakan oleh JavaScript untuk tujuan ini ialah Object.freeze() dan Object.seal(). Memahami perbezaan dan kes penggunaan mereka adalah kunci untuk menulis kod yang mantap.


1. Object.freeze()

Kaedah Object.freeze() menjadikan objek tidak berubah. Ini bermakna:

  • Tiada sifat baharu boleh ditambah.
  • Sifat sedia ada tidak boleh diubah suai, dialih keluar atau dikonfigurasikan semula.
  • Objek secara berkesan "beku" dan tidak boleh ditukar dengan apa cara sekalipun.

Sintaks:

Object.freeze(obj);

Contoh:

const obj = { name: "Alice", age: 25 };
Object.freeze(obj);

obj.age = 30; // Does nothing (strict mode: throws an error)
obj.gender = "female"; // Does nothing (strict mode: throws an error)
delete obj.name; // Does nothing (strict mode: throws an error)

console.log(obj); // { name: "Alice", age: 25 }

Kes Penggunaan:

  • Untuk memastikan objek kekal malar sepanjang program anda, seperti tetapan konfigurasi.

Menyemak sama ada Objek Dibekukan:

Gunakan Object.isFrozen() untuk menentukan sama ada objek dibekukan:

console.log(Object.isFrozen(obj)); // true

2. Object.seal()

Kaedah Object.seal() mengehadkan pengubahsuaian pada objek tetapi kurang ketat daripada Object.freeze(). Ia membenarkan:

  • Pengubahsuaian sifat sedia ada (nilai boleh berubah).
  • Pencegahan menambah atau mengalih keluar sifat.

Sintaks:

Object.seal(obj);

Contoh:

const obj = { name: "Bob", age: 30 };
Object.seal(obj);

obj.age = 35; // Allowed: Existing properties can be modified
obj.gender = "male"; // Does nothing (strict mode: throws an error)
delete obj.name; // Does nothing (strict mode: throws an error)

console.log(obj); // { name: "Bob", age: 35 }

Kes Penggunaan:

  • Apabila anda ingin melindungi struktur objek (menghalang penambahan/pemadaman) tetapi masih membenarkan perubahan pada nilai harta benda.

Menyemak sama ada Objek Dimeterai:

Gunakan Object.isSealed() untuk menentukan sama ada objek dimeterai:

Object.freeze(obj);

3. Perbezaan Utama Antara Object.freeze() dan Object.seal()

Ciri Object.freeze() Object.seal() Tambah sifat baharu
Feature Object.freeze() Object.seal()
Add new properties Not allowed Not allowed
Remove existing properties Not allowed Not allowed
Modify existing properties Not allowed Allowed
Reconfigure property descriptors Not allowed Not allowed
Use case Immutable objects (constants) Restrict structure but allow value changes
Tidak dibenarkan
Tidak dibenarkan

Alih keluar sifat sedia ada Tidak dibenarkan Tidak dibenarkan

Ubah suai sifat sedia ada Tidak dibenarkan Dibenarkan

Konfigurasikan semula deskriptor sifat Tidak dibenarkan Tidak dibenarkan
const obj = { name: "Alice", age: 25 };
Object.freeze(obj);

obj.age = 30; // Does nothing (strict mode: throws an error)
obj.gender = "female"; // Does nothing (strict mode: throws an error)
delete obj.name; // Does nothing (strict mode: throws an error)

console.log(obj); // { name: "Alice", age: 25 }
Kes penggunaan Objek tidak boleh ubah (pemalar) Hadkan struktur tetapi benarkan perubahan nilai

4. Objek Bersarang Beku dan Tertutup
console.log(Object.isFrozen(obj)); // true

Kedua-dua Object.freeze() dan Object.seal() adalah cetek, bermakna ia tidak menjejaskan objek bersarang. Untuk membekukan atau mengelak objek secara mendalam, anda perlu menggunakan kaedah secara rekursif pada setiap objek bersarang.

  1. Contoh (Kesan Cetek):
  2. Fungsi Pembantu Deep Freeze:
  3. 5. Perangkap dan Petua Biasa

Tingkah Laku Mod Tidak ketat

: Dalam mod tidak ketat, perubahan pada objek beku atau tertutup gagal secara senyap. Sentiasa gunakan mod ketat ("gunakan ketat";) untuk penyahpepijatan yang lebih jelas.

Cegah Kekeliruan dengan Kebolehubahan Objek: Dokumen dengan jelas bila dan sebab objek dibekukan atau dimeterai untuk mengelakkan salah tafsir dalam persekitaran pasukan.

Kedap Sebelum Membekukan

: Jika anda mahukan kedua-dua struktur terhad dan kebolehubahan, tutup objek dahulu, kemudian bekukannya.
Kesimpulan Kedua-dua Object.freeze() dan Object.seal() ialah alatan yang berharga untuk mengurus kebolehubah objek dalam JavaScript. Walaupun Object.freeze() memastikan kebolehubah sepenuhnya, Object.seal() menawarkan fleksibiliti dengan membenarkan perubahan pada nilai harta sedia ada. Memilih kaedah yang betul bergantung pada tahap kawalan yang anda perlukan ke atas objek anda. Hai, saya Abhay Singh Kathayat! Saya seorang pembangun tindanan penuh dengan kepakaran dalam kedua-dua teknologi hadapan dan belakang. Saya bekerja dengan pelbagai bahasa pengaturcaraan dan rangka kerja untuk membina aplikasi yang cekap, berskala dan mesra pengguna. Jangan ragu untuk menghubungi saya melalui e-mel perniagaan saya: kaashshorts28@gmail.com.

Atas ialah kandungan terperinci Menguasai Object.freeze() dan Object.seal() dalam JavaScript: Mengawal Kebolehubahan Objek. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn