Objekty - object
Díky objektům můžeme v JavaScriptu tvořit komplexní datové struktury (další odborný pojem, gratuluji!)
Uděláme si proměnnou, která obsahuje data o písni ze Spotify
const song = { title: "FE!N (feat. Playboi Carti)", author: "Travis Scott", playCount: 1_234_379_698, lengthSeconds: 191, isExplicit: true, url: "https://open.spotify.com/track/42VsgItocQwOQC3XWZ8JNA", } console.log(song.title) // Výstup: "FE!N (feat. Playboi Carti)" console.log(song.author) // Výstup: "Travis Scott"
Máme komplexní datovou strukturu a ani to nebolelo.
Vytvořili jsme objekt song, který obsahuje klíče title, author, playCount, lengthSeconds, isExplicit a url.
Ke každému klíči je v objektu přiřazena hodnota - key a value.
- Klíč je název vlastnosti (např. barva očí)
- Hodnota klíče je hodnota jeho vlastnosti (např. hnědá)
- Objekt definujeme pomocí chlupatých závorek -
{ } - Klíč je vždy typu
string(neboSymbol) - Klíče od sebe oddělujeme čárkou
, - Pro přehlednost je oddělujeme i novým řádkem, ale není to nutné
- Hodnota může být jakýkoli typ v JavaScriptu, například i funkce
Syntaxe objektu:
const indentifier = { key: "value", key1: "value1", // ... key32: "value32", } // Přístup ke klíčům objektu console.log(indentifier.key) // Výstup: "value" console.log(indentifier["key1"]) // Výstup: "value1" console.log(indentifier.key33) // Výstup: undefined
Pozor! Syntaxe JavaScript objektu a JSONu není stejná, v detailech se liší!
Objekty se nerovnají
Tohle je trochu techničtější, ale v Pass by value je vysvětleno, že hodnota object je jenom pointer na paměť.
V praxi to znamená toto:
const product1 = { id: 1, name: "Káva" }; const product2 = { id: 1, name: "Káva" }; console.log(product1 === product2); // Výstup: false
I když jsou objekty stejný, tak pro JavaScript nejsou. JavaScript u objektu kontroluje, jestli míří na stejné místo v paměti a to se tady neděje.
Když chceš mezi sebou porovnávat objekty, musíš to nějak vymyslet. Třeba je porovnávat na základě jednoho stejného klíče (např. id). Nebo porovnat všechny klíče.
Spread syntaxe
TODO: { ...object }