Rumah > hujung hadapan web > tutorial js > Kebolehubahan Objek dalam Javascript

Kebolehubahan Objek dalam Javascript

王林
Lepaskan: 2024-07-20 07:44:38
asal
995 orang telah melayarinya

Object Mutability in Javascript

Kebolehubahan Objek

Mutability ialah keupayaan untuk mengubah sesuatu nilai. Nilai boleh ubah boleh ditukar, dan nilai tidak berubah tidak boleh diubah. Salah tanggapan yang lazim ialah kata kunci "const" menjadikan pembolehubah tidak berubah.

const

Sebenarnya, "const" hanya menghalang penugasan semula. Untuk jenis bukan objek, nilai hanya boleh ditukar melalui penugasan semula, jadi mengisytiharkannya dengan "const" sebenarnya menjadikannya tidak boleh diubah. Pertimbangkan, sebagai contoh, kod berikut:

const num = 5;
num = 7; // illegal reassignment of const variable
Salin selepas log masuk

Tiada cara untuk menukar nilai num dalam kod ini. Ambil perhatian bahawa menggunakan ++ atau -- masih dianggap sebagai penugasan semula dan itu ditunjukkan dalam mesej ralat jika kami cuba menggunakannya pada pembolehubah yang diisytiharkan dengan const.

const num = 5;
num++;//illegal reassignment of constant
Salin selepas log masuk

Ralat yang terhasil ialah:

Uncaught TypeError: Assignment to constant variable.
Salin selepas log masuk

objek const boleh berubah-ubah

Objek pada asasnya berbeza dalam hal kebolehubahan kerana nilainya boleh berubah tanpa penugasan semula pembolehubah. Ambil perhatian bahawa penugasan semula hartanah tidak dihalang oleh "const". Hanya nama pembolehubah dihalang daripada penugasan semula.

const obj = {num: 5};
obj.num = 7; //legal
obj = {num: 7}; //illegal reassignment 
Salin selepas log masuk

Objek juga boleh mempunyai kaedah yang mengubah nilai dalaman.

const obj = {
    num: 5,
    increment(){
        this.num++;
    }
}
obj.increment();
console.log(obj.num); //6
Salin selepas log masuk

Menjadikan objek tidak berubah

Adalah mungkin untuk menjadikan objek benar-benar tidak berubah dengan mengisytiharkannya dengan "const" dan menggunakan Object.freeze().

const obj = {num: 5};
Object.freeze(obj);
obj.num = 7; // doesn't change
console.log(obj.num);// still 5
Salin selepas log masuk

Perhatikan bahawa jika kami menggunakan mod ketat, percubaan untuk menukar nilai num sebenarnya akan menyebabkan ranap dengan mesej ralat berikut:

Cannot assign to read only property 'num'
Salin selepas log masuk

Penggunaan Object.freeze() tanpa "const" sudah memadai untuk menjadikan objek ini tidak berubah. Walau bagaimanapun, ia tidak menjadikan nama pembolehubah tidak boleh diubah.

let obj = {num: 5};
Object.freeze(obj);
obj = {num: 5}; // new object with old name
obj.num = 7; // changes successfully
console.log(obj.num);// 7
Salin selepas log masuk

Apa yang berlaku dalam versi kod ini ialah obj ditugaskan semula. Pembekuan() telah digunakan pada objek sebelumnya yang berkongsi nama yang sama, tetapi objek baharu itu tidak pernah dibekukan, jadi ia boleh berubah.

Mengedap objek

Ada kalanya anda mungkin mahu membenarkan nilai dalam objek berubah, tetapi anda tidak mahu membenarkan menambah atau mengalih keluar sifat. Ini boleh dicapai dengan menggunakan Object.seal().

let obj = {num: 5};
Object.seal(obj);
obj.num = 7; // changes
console.log(obj.num);// 7
obj.newValue = 42; //cannot add new property to sealed object
console.log(obj.newValue);//undefined
delete obj.num; //cannot delete property from sealed object
console.log(obj.num);// still exists and is 7
Salin selepas log masuk

Kawalan berbutir

Pembekuan dan pengedap dikenakan pada keseluruhan objek. Jika anda ingin membuat sifat tertentu tidak berubah, itu boleh dilakukan menggunakan defineProperty() atau defineProperties(). Pilihan antara kedua-dua ini bergantung pada jika anda ingin mempengaruhi satu harta atau berbilang sifat.

const obj = {};
Object.defineProperty(obj, 'num',{
    value: 5,
    writable: false,
    configurable: false
});
obj.num = 7; // Cannot change value because writable is false
delete obj.num; // Cannot delete because configurable is false
console.log(obj.num);//Still exists and is 5
Salin selepas log masuk

Sifat baharu sedang ditakrifkan dalam contoh ini, tetapi defineProperty() juga boleh digunakan pada harta sedia ada. Ambil perhatian bahawa jika "boleh dikonfigurasikan" sebelum ini ditetapkan kepada palsu, ia tidak boleh ditukar kepada benar, tetapi jika ia pada asalnya benar, ia boleh ditetapkan kepada palsu, kerana perubahan ini dikira sebagai jenis konfigurasi.

Kesimpulan

Dalam kebanyakan kes, anda tidak perlu menjamin bahawa objek tidak boleh diubah. Apabila keperluan sedemikian timbul, secara amnya ia mencukupi untuk membekukan objek, tetapi kami mempunyai pilihan tambahan untuk kawalan yang lebih halus jika keperluan sedemikian timbul.

Atas ialah kandungan terperinci Kebolehubahan Objek dalam Javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan