Tassavur qilaylik bizda bitta a o'zgaruvchisi bor:
let a = 5;
Va biz uni keyinchalik boshqa o'zgaruvchiga tengladik:
let b = a
console.log(a, b)
// Natija: 5,5
Bunday holatda albatta natija 5 va 5 chiqadi buni bilamiz. Keyinchalik misol uchun
b = 7 natijani chiqarsak albatta 5 va 7 javob olamiz. Bu yerda hech qanday WOW deydigan joy yo'q.
Endi keling buni primitiv ma'lumot turida emas reference ma'lumot turadi ko'ramiz misol uchun object.
Deylik bizda shunday object bor:
const person = {
name: "Azizbek",
age: 20
}Uni ham keling boshqa o'zgaruvchiga tenglaymiz va qiymatini o'zgartirib ko'ramiz:
const newPerson = person;
newPerson.name = "Otabek"
newPerson.age = 16
console.log(person, newPerson)
Bunaqa holatda biz shunday natija konsolda shunday natija olamiz:
{ name: 'Otabek', age: 16 } { name: 'Otabek', age: 16 }E'tibor bergan bo'lsangiz bu holatda primitiv turdan farqli ravishda person obj'sini qiymatlari ham o'zgarib qoldi.
Nimaga deyilsa, javob oddiy biz shallow copy ya'ni sayoz nusxalash qilyapmiz.
Buni oldini olish mumkinmi? Ha oldini olish mumkin buning uchun biz deep ya'ni chuqur nusxalashdan foydalanishimiz kerak:
const newPerson = {...person};
newPerson.name = "Otabek"
newPerson.age = 16
console.log(person, newPerson)
// Natija: { name: 'Azizbek', age: 20 } { name: 'Otabek', age: 16 }Ko'rib turganingizdek bu holatda biz
newPerson'ni shunchaki person'ga tenglab qo'ymayapmiz, balki person objsini ... (spread operatori) orqali qaytadan yoyyapmiz. Bu uslubimizni agarda
arrayga qo'llamoqchi bo'lsangiz shunchaki {} qavslar o'rniga [] qavslardan foydalanamiz. Misol: const newPerson = [...person];@azizify
