Referans və ümumi baxış necə alınır? JavaScript-də dəyər

Bu məqalədə müxtəlif JavaScript məlumat növlərinin dəyişənə təyin edildiyi zaman necə davrandıqları izah olunur. Məlumat növündən asılı olaraq, qənaət üçün yaddaş fərqli olaraq ayrılır. Dəyərin bir nüsxəsini saxlamaq üçün yeni yer ayrılmış ola bilər və ya bir kopyası ümumiyyətlə edilə bilməz və yalnız mövcud dəyərə (istinad) istinad edə bilərsiniz.

Budur Wes Bos'un Javascript30 kursu zamanı qeydlərim.

Nömrələr, simlər və buğalar

JavaScript-də, təyin olunmamış, boş, sətir, nömrə, boole və simvol kimi ibtidai növlər dəyər kimi ötürülür.

qoy ad = "Marina"; qoy name2 = ad;
console.log ({ad, ad2}); >> {ad: 'Marina', ad2: 'Marina'}
ad = "Vinicius";
console.log ({ad, ad2}); >> {ad: 'Vinicius', ad2: 'Marina'}
Keçən dəyər.

Dəyişən ad verildikdə, bu dəyəri saxlamaq üçün 0x001 ünvanlı bir yaddaş yeri qorunur. Sonra dəyişən ad bu ünvanı göstərir. Ardından name2 dəyişən eyni ada qoyulur. 0x002 yeni ünvanı olan yeni bir yer ayrılır və adın göstərildiyi ünvanda saxlanılan dəyərin bir nüsxəsini saxlayır.

Beləliklə, adın dəyərini dəyişdirmək istəyiriksə, name2 tərəfindən saxlanılan dəyər dəyişdirilmir, çünki fərqli bir yerdə saxlanılan bir nüsxədir.

Obyektlər və Diziler

JavaScript-dəki obyektlər istinad kimi ötürülür. Bir obyekt, massiv və ya funksiyanı saxlamaq üçün birdən çox dəyişən təyin olunarsa, bu dəyişənlər yaddaşdakı eyni ayrılmış yerə istinad edəcəkdir.

const heyvanlar = ['pişik', 'it', 'at', 'ilan'];
heyvanlara icazə verin2 = heyvanlar; console.log ({heyvanlar, heyvanlar2}); >> {Heyvanlar: ['pişik', 'it', 'at', 'ilan'], heyvanlar2: ['pişik', 'it', 'at', 'ilan']}
heyvanlar2 [3] = 'balinalar'; console.log (heyvanlar, heyvanlar2); >> {Heyvanlar: ['pişik', 'it', 'at', 'balina'], heyvanlar2: ['pişik', 'it', 'at', 'balina']}
İstinad üçün keçdi.

Heyvanlar bir sıra saxlamalı olduqda, yaddaş ayrılır və bu dəyişənə bir ünvan verilir. Sonra heyvanlar2 heyvanlara bərabər tutulur. Heyvanlar bir sıra saxladığından, həmin massivin surətini çıxarmaq və yaddaşda yeni bir ünvan yaratmaq əvəzinə, heyvanlar2 mövcud ünvanda eyni obyekti göstərir. Bu şəkildə, heyvanlarda edilən hər hansı bir dəyişiklik, eyni yeri göstərdikləri üçün heyvanları təsir edəcəkdir.

Eyni davranışı obyektlər üçün görəcəksiniz:

const person = {ad: "Marina", yaş: 29};
qoy femme = şəxs; qadın yaşı = 18;
console.log ({person, femme}); >> {Şəxs: {Ad: 'Marina', Yaş: 18}, Qadın: {Ad: 'Marina', Yaş: 18}}

Obyektləri və massivləri kopyalayın

Bir obyektin surətini yaratmaq üçün sadə bir tapşırıq kifayət etmədiyi üçün digər yanaşmalar buna nail ola bilər:

Diziler

Disk ()

heyvanlara icazə verin2 = heyvanlar. dilim (); heyvanlar2 [3] = 'Köpək balığı';

qat ()

heyvanlara icazə verin3 = [] .concat (heyvanlar); heyvanlar3 [3] = 'pələng';

yayılma (ES6)

qoy heyvanlar4 = [... heyvanlar]; heyvanlar4 [3] = 'aslan';

Dəyişikliklər yalnız dəyişdirilmiş obyektə təsir göstərir:

console.log ({heyvanlar, heyvanlar2, heyvanlar3, heyvanlar4}); >> {Heyvanlar: ['pişik', 'it', 'at', 'ilan'], heyvanlar2: ['pişik', 'it', 'at', 'köpək balığı'], heyvanlar3: ['pişik', 'Köpək', 'at', 'pələng'], heyvanlar4: ['pişik', 'it', 'at', 'aslan']}

Obyektlər

təyin etmək ()

let human = Object.assign ({}, şəxs, {yaş: 20});
console.log (şəxs, insan); >> {Şəxs: {Ad: 'Marina', Yaş: 29}, Şəxs: {Ad: 'Marina', Yaş: 20}}

Dərin klon

Qeyd etmək vacibdir ki, bu metodlar yalnız bir səviyyədədir. Dərin klonlar üçün qaşqabaqlı bir metod var. Diqqətlə istifadə edin.

qoy femme3 = JSON.parse (JSON.stringify (şəxs)); femme3.name = 'Leslie';
console.log (şəxs, femme3); >> {Şəxs: {Ad: 'Marina', Yaş: 29}, femme3: {ad: 'Leslie', Yaş: 29}}

İstinadlar

  • WesBos - Javascript 30
  • JS: Scope & Closures - Kyle Simpson'u bilmirsiniz

Əvvəlcə marina-ferreira.github.io saytında yayımlandı.