Ի՞նչ է օբյեկտը 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 };