Ի՞նչ է օբյեկտը JavaScript-ում
JavaScript-ում օբյեկտը
JavaScript-ում օբյեկտը (object) տվյալների հիմնական կառուցվածքներից է, որը հնարավորություն է տալիս պահել արժեքներ key: value ձևաչափով։
Ասենք՝ դու ուզում ես նկարագրել մեկ մարդու տվյալները. դրա համար լավագույն տարբերակն օբյեկտն է։
const person = {
firstName: "Արամ",
lastName: "Խաչատրյան",
age: 30,
isDeveloper: true
};
Այս կոդը ստեղծում է person անունով օբյեկտ, որը պահում է տվյալներ մարդու մասին։
Երկու տարբերակ կա՝
console.log(person.firstName); // Արամ
console.log(person["lastName"]); // Խաչատրյան
Կաղապարային գրառումն օգտակար է, երբ հատկության անունը պահված է փոփոխականի մեջ.
const key = "age";
console.log(person[key]); // 30
person.age = 31; // փոփոխում է գոյություն ունեցող արժեքը
person.city = "Երևան"; // ավելացնում է նոր հատկություն
Օբյեկտում կարող ենք նաև ֆունկցիաներ ավելացնել, որոնք անվանում ենք մեթոդներ։
const person = {
firstName: "Արամ",
lastName: "Խաչատրյան",
fullName() {
return this.firstName + " " + this.lastName;
}
};
console.log(person.fullName()); // Արամ Խաչատրյան
const keys = Object.keys(person); // ['firstName', 'lastName']
const values = Object.values(person); // ['Արամ', 'Խաչատրյան']
const entries = Object.entries(person);
// [['firstName', 'Արամ'], ['lastName', 'Խաչատրյան']]
const a = { x: 1 };
const b = { x: 1 };
console.log(a === b); // false
Օբյեկտները համեմատվում են ըստ հղման (reference), ոչ թե ըստ պարունակության։
JavaScript-ում երբ պարզապես փոխանցում ես օբյեկտը մի փոփոխականից մյուսին, դա իրականում փոխանցում է հղումը, ոչ թե պատճենը։
onst original = { name: "Արամ" };
const copy = original;
copy.name = "Մարիամ";
console.log(original.name); // Մարիամ
Այսպես ստացվում է, որ երկու փոփոխականն էլ հղված են նույն օբյեկտին։
const original = { name: "Արամ" };
const copy = Object.assign({}, original);
copy.name = "Մարիամ";
console.log(original.name); // Արամ
const copy = { ...original };
Երբ օբյեկտի ներսում կա այլ օբյեկտ՝
const user = {
name: "Արամ",
contact: {
email: "aram@example.com",
phone: "099123456"
}
};
Հասանելիություն՝
console.log(user.contact.email); // aram@example.com
Object.assign կամ { ...obj } չեն կլոնավորում nested օբյեկտները խորությամբ։
const clone = { ...user };
clone.contact.email = "mariam@example.com";
console.log(user.contact.email); // mariam@example.com
Այստեղ, թեև վերին մակարդակը կլոնավորվել է, բայց contact-ը հղում է նույն օբյեկտին։
Ամենապարզ տարբերակ՝ JSON hack (աշխատում է միայն եթե օբյեկտում ֆունկցիաներ չկան)։
const deepClone = JSON.parse(JSON.stringify(user));
Կամ կարելի է օգտագործել գրադարաններ, օրինակ՝ lodash-ի cloneDeep։
| Feature | Object.assign | Spread Operator |
| Syntax | Long | Short |
| Deep Clone | ❌ | ❌ |
| Merge Multiple | ✅ | ✅ |
const a = { x: 1 };
const b = { y: 2 };
const merged1 = Object.assign({}, a, b);
const merged2 = { ...a, ...b };