Objekty
Prozatím jsme v naších programech pracovali pouze s čísly, řetězci a pravdivostními hodnotami. V reálnějších programech však budeme potřebovat do naších proměných uložit více než pouze jednu informaci. Představte si například, že chceme evidovat doručovací adresu uživatele e-shopu. Každá adresa má ulici, číslo domu, město a PSČ. Takovou informaci bychom mohli zkusit nacpat do jednoho řetězce třeba takto.
const address = 'Pod Kaštany 31, 123 11 Horní Dlouhonosy';
Vysekat z takového řetězce jednotlivé údaje je ovšem dost pracné a našikovné. Pokud chceme informace lépe strukturovat, použijeme v JavaScriptu takzvané objectsobjekty.
const address = {
streetName: 'Pod Kaštany',
number: 31,
city: 'Horní Dlouhonosy',
postalCode: '123 11',
};
Objekt vytvoříme tak, že do složených závorek vložíme čárkou oddělené záznamy, kterým se říká propertiesvlastnosti. Každá vlastnost sestává z takzvaného keyklíče a valuehodnoty.
Pomocí klíčů pak můžeme z objektu získat jednotlivé hodnoty použitím takzvané dot notationtečkové notace.
address.city // ⟶ "Horní Dlouhonosy"
address.streetName // ⟶ "Pod Kaštany"
address.number // ⟶ 31
Klíče v objektu se chovají podobně jako proměnné. Řídí se stejnými pravidly pro názvosloví. Můžete tedy mít objekty třeba v hadí notací.
const address = {
street_name: 'Pod Kaštany',
number: 31,
city: 'Horní Dlouhonosy',
postal_code: '123 11',
};
Nelze však použít například klíče s pomlčkou.
const address = {
street-name: 'Pod Kaštany',
number: 31,
city: 'Horní Dlouhonosy',
postal-code: '123 11',
};
Hodnoty uvnitř objektů lze také měnit. Takto například můžeme změnit číslo ulice.
address.number = 28;
Všimněte si, že při vytváření objekt ukládáme do proměnné, jde tedy o nový typ hodnoty, podobně jako číslo nebo řetězec. To mimo jiné znamená, že uvnitř objektu můžeme mít vnořené další objekty. Takto bychom mohli například reprezentovat uživatele i s doručovací adresou.
const user1 = {
fullName: 'Lubomír Větvička',
login: 'lubos',
address: {
streetName: 'Pod Kaštany',
number: 31,
city: 'Horní Dlouhonosy',
postalCode: '123 11',
},
cartItems: 0,
};
Kdybychom pak chtěli získat například město, kam máme objednané zboží doručit, opět použijeme tečkovou notaci.
user1.address.city // ⟶ "Horní Dlouhonosy"
Díky objektům tak můžeme v našich programech reprezentovat i velmi komplikovaná data.