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 Show
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 JavaScriptSingkatnya, 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. objekKumpulan 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 < guest.name = "John"; Dengan kata lain, apa yang diberikan const user = { name: "Jane", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, }_8 kepada kita adalah ketetapan penugasan, bukan nilai ketetapan Membatasi perubahan pada properti objek dan seluruh objekKarena objek dalam JavaScript disalin dengan referensi, selalu ada risiko bahwa referensi yang disalin mengubah objek aslinya. Bergantung pada kasus penggunaan Anda, perilaku seperti itu mungkin tidak diinginkan. Dalam hal ini, mungkin masuk akal untuk "mengunci" objek (Idealnya, Anda akan membuat salinan objek Anda dan memodifikasinya, bukan objek aslinya. Meskipun sebagian besar mekanisme penyalinan atau kloning dangkal, jika Anda bekerja dengan objek bersarang dalam, Anda pasti menginginkan kloning dalam. ) JavaScript menyediakan tiga metode yang melakukan berbagai tingkat pembatasan akses ke objek. Ini termasuk guest.name = "John"; // now both user and guest look like this: { name: "John", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, }2, guest.name = "John"; // now both user and guest look like this: { name: "John", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, }3, dan guest.name = "John"; // now both user and guest look like this: { name: "John", surname: "Traveller", stayDuration: "3 weeks", roomAssigned: 1022, }4. Meskipun kami akan membahas yang terakhir, kami akan fokus pada dua yang pertama Lebih dari 200 ribu pengembang menggunakan LogRocket untuk menciptakan pengalaman digital yang lebih baikPelajari lebih lanjut →
|