Cara deep freeze objek di javascript

Saat bekerja dengan nilai dan objek dalam JavaScript, terkadang Anda mungkin perlu membatasi apa yang dapat dilakukan dengannya untuk mencegah perubahan pada objek konfigurasi di seluruh aplikasi, objek keadaan, atau konstanta global

Fungsi dengan akses ke data tersebut dapat memodifikasinya secara langsung padahal seharusnya tidak (dan ini juga dapat berasal dari kesalahan yang tidak disengaja yang dibuat oleh pengembang). Selain itu, pengembang lain yang mengerjakan basis kode yang sama (atau menggunakan kode Anda) mungkin membuat perubahan tersebut secara tidak terduga

Syukurlah JavaScript menyediakan beberapa konstruksi untuk menangani situasi semacam ini

Dalam tutorial ini, kita akan membahas konsep kekekalan dan metode objek const user = { name: "Jane", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, } 6 dan const user = { name: "Jane", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, } 7 dalam JavaScript. Kita akan melihat cara kerjanya menggunakan contoh kode ilustratif dan mendiskusikan kemungkinan batasan kinerja. Sekarang, mari kita mulai

Memahami kekekalan dalam JavaScript

Singkatnya, membuat objek tidak berubah berarti bahwa perubahan lebih lanjut tidak akan berlaku. Pada dasarnya, statusnya menjadi hanya-baca. Sampai batas tertentu, inilah yang dicapai oleh kata kunci const user = { name: "Jane", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, } 8

const jarOfWine = "full"; // throws error "Uncaught TypeError: Assignment to constant variable." jarOfWine = "empty";

Namun tentu saja, kita tidak dapat menggunakan const user = { name: "Jane", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, } 8 untuk entitas seperti objek dan larik karena cara kerja deklarasi const user = { name: "Jane", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, } 8 — ini hanya membuat referensi ke suatu nilai. Untuk menjelaskan ini, mari tinjau tipe data JavaScript

Primitif vs. objek

Kumpulan tipe data pertama adalah nilai yang hanya terdiri dari satu item. Ini termasuk primitif seperti string atau angka yang tidak dapat diubah

let nextGame = "Word Duel"; // change to "Word Dual"? Doesn't stick. nextGame[7] = “a”; nextGame; // still "Word Duel" // Of course, if we'd declared nextGame with `const`, then we couldn't reassign it. nextGame = "Word Dual"; nextGame; // now "Word Dual" _

Saat kami menyalin tipe primitif ini, kami menyalin nilai

const jarOfWine = "full"; const emptyJar = jarOfWine; // both jars are now 'full'

Kedua variabel, const guest = user; 1 dan const guest = user; 2, sekarang berisi dua string terpisah, dan Anda dapat mengubah salah satunya secara terpisah dari yang lain. Namun, objek berperilaku berbeda

Saat Anda mendeklarasikan objek, seperti pada kode berikut, variabel const guest = user; 3 tidak berisi objek itu sendiri, tetapi referensi untuk itu

const user = { name: "Jane", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, }

Ini seperti menuliskan alamat gua yang berisi tumpukan emas Anda. Alamatnya bukan gua. Jadi, saat kami mencoba menyalin objek menggunakan metode penetapan yang sama seperti saat kami menyalin string, kami akhirnya hanya menyalin referensi atau alamat dan kami tidak memiliki dua objek terpisah

const guest = user; _

Memodifikasi const guest = user; _3 juga mengubah const guest = user; 5

guest.name = "John"; // now both user and guest look like this: { name: "John", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, }

Anda biasanya dapat menguji ini dengan metode const guest = user; 6 atau operator persamaan ketat

Object.is(user, guest) // returns true user === guest // returns true

Ini permainan serupa dengan kata kunci const user = { name: "Jane", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, } 8. Itu membuat referensi ke suatu nilai, yang berarti bahwa meskipun pengikatan tidak dapat berubah (yaitu, Anda tidak dapat menugaskan kembali variabel), nilai yang dirujuk dapat berubah

Ini terjadi ketika kami berhasil memodifikasi properti const guest = user; 8 sebelumnya, meskipun const guest = user; 5 dideklarasikan dengan const user = { name: "Jane", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, } 8

Postingan terbaru

LIHAT SEMUA