Օբյեկտներ (Objects)
"Օբյեկտները JavaScript-ի հիմնական կառուցվածքային միավորներն են:"
Հիմունքներ և Սինտաքս
Ի տարբերություն պրիմիտիվների, օբյեկտները պահում են հավաքածուներ: Դրանք կարող ենք պատկերացնել որպես պահարաններ, որտեղ ամեն դարակ ունի իր անունը (key) և պարունակությունը (value):
Ստեղծում
let user = {name: "John",
age: 30
};
Գործողություններ
-
Ավելացում:
user.isAdmin = true; -
Հեռացում:
delete user.age; - Trailing comma: Վերջին ստորակետը թույլատրելի է:
🔒 Const-ի պարադոքսը
Շատերը կարծում են, որ եթե օբյեկտը հայտարարված է
const-ով, այն չի կարող փոփոխվել։ Իրականում
const-ը պաշտպանում է հղումը (հասցեն), այլ
ոչ թե բովանդակությունը։
❌ Արգելված է: Փոփոխականին նոր հասցե վերագրելը (user = { ... })
✅ Թույլատրված է: Գոյություն ունեցող հասցեի ներսում
դարակների պարունակությունը փոխելը (user.name = "New Name")
Հասանելիության մեթոդներ
Dot Notation (.)
Ամենատարածված ձևն է: Օգտագործվում է, երբ բանալին պարզ տեքստ է:
console.log(user.name);
Square Brackets ([])
Օգտագործվում է բարդ բանալիների կամ դինամիկ փոփոխականների դեպքում:
console.log(user["likes birds"]);
"name"
in user;
// true
Ցիկլեր (for...in)
for..in ցիկլը հատուկ նախատեսված է օբյեկտի բոլոր
ստեղծված բանալիների վրայով անցնելու համար։
Հատկությունների շրջանցում
for (let
key in user) {console.log(key,
user[key]);}
🔢 Հերթականության կանոնը (The "Integer" Rule)
Եթե բանալիները կարող են փոխակերպվել ամբողջ թվի, ապա դրանք կդասավորվեն աճման կարգով։
Օրինակ
let codes = {"49": "Germany",
"41": "Switzerland",
"1": "USA"
};
for (let
key in codes) {console.log(key);
// 1, 41, 49}
Ինչո՞ւ է սա կարևոր
1, 41 և 49-ը ամբողջ թվեր են և տեսակավորվում են։
💡 Մասնագիտական հուշում
-
զանգվածներ: Խուսափեք
for..in-ից զանգվածների դեպքում: -
Հերթականության պահպանում: Եթե ուզում եք, որ թվերը
չտեսակավորվեն, ավելացրեք
+նշանը: -
Prototype Chain:
for..in-ը տեսնում է նաև ժառանգված հատկությունները:
References (Հղումներ)
Օբյեկտի ամենակարևոր տարբերությունը պրիմիտիվներից այն է, որ դրանք պահվում և պատճենվում են ըստ հղման:
Հիշեք
Երբ պատճենում եք օբյեկտը, դուք պատճենում եք միայն նրա հասցեն հիշողության մեջ:
⚖️ Համեմատում (Comparison Logic)
{} == {} միշտ false է: JS-ը համեմատում
է հասցեները, ոչ թե պարունակությունը:
♻️ Garbage Collection (Աղբահանություն)
Եթե օբյեկտին տանող բոլոր հղումները ջնջվում են, այն դառնում է "Unreachable":
👯 Ինչպես իրականում պատճենել (Cloning)
| Մեթոդ | Տեսակ | Երբ օգտագործել |
|---|---|---|
{...obj} |
Shallow Copy | Երբ օբյեկտը պարզ է (չունի ներդրված օբյեկտներ) |
structuredClone(obj) |
Deep Copy | Ժամանակակից ստանդարտ՝ ամբողջական պատճենի համար |
⚠️ Գործնական զգուշացում (Side Effects)
«Երբ դուք օբյեկտը փոխանցում եք ֆունկցիային որպես արգումենտ, դուք փոխանցում եք հղումը։ Սա կարող է բերել Side Effects»։