# đïžâđšïž Om object i js
- Objekt och funktioner Àr grunden för JS
- Allt annat Àr egentligen trasel.
- Bort sÀtt ifrÄn de grundlÀggande typerna, sÄ Àr det mesta objekt.
â Vad Ă€r ett object?
Object Àr ett samling av egenskaper.
- En egenskap bestÄr i sin tur av namn och vÀrden.
- Namnet anvÀnds för att hitta ett vÀrde.
- Ett vÀrde kan vara av vilken typ som helst.
- Om vÀrdet Àr en funktion kallas egenskapen för en metod.
- Ett namn Àr en String eller en Symbol. AnvÀnds andra typer som namn kommer de konverteras till String.
đŁ NĂ„gra kommentar om Object
Objekt finns Àver allt i JS.
- Funktioner i js Àr objekt.
- Array i js Àr object.
- VÀrden av övriga typer beter sig ibland som objekt.
- Men det Àr kompliserat.
Vad kan vi anvÀnder Object till?
Till nÀstan allt!
- För att representera nÄgot i vÄr kod
- För att hÄlla ordning pÄ metoder i ett bibliotek.
- För att kapsla in vÀrden saÄ att koden inte blir krÄnglig.
đïž Finns Object i andra sprĂ„k?
Objekt i JS har funktoner som Äterfinns i mÄnga olika koncept i andra sprÄk.
- I C++, java eller C# anvÀnds klasser för att skapa objekt.
- Det finns ocksÄ en datatype Map i mÄnga sprÄk som har en liknade funktion.
- I python kallas denna för Dictionaries.
Att sÀtta in ett vÀrde i ett Object
Ett vÀrde kan tilldelas genom att anvÀnda "=" och en hÄrd parantes.
- Exempel: let o={} - o"tre" - =3"tre" - o"points"=35
- Exempel: o1 - ="ett"1 - let a="result"; oa=35
- Fry gÄt ocksÄ istÀllet för paranteser bara anvÀnda en punkt "." och namnet pÄ egenskapen.
- Exempel: o.tre = 3 - o.points = 35
Att fÄ ett vÀrde ifrÄn ett Object
Ett vÀrde kan fÄs genom att helt enkel skriva namnet pÄ egenskapen du behöver innan för hÄrda paranteser.
- Exempel: o"tre"
- Exempel: o.points + o3
- Exempel: o.tre
đ Att konvertera till och frĂ„n ett Object
Det ger oftas inga bra resultat att konvertera till eller ifrÄn Object.
- Boolean({}) //true
- Number({}) //NaN
- String({}) //"object Object"
đŹ Ăr detta ett Object?
Det gÄr att anvÀna typeof eftersom den returnerar "object", men tÀnk pÄ:
if(o !== undefined && o.p !== undefined) {
console.log("Objectet o har en egenskap p!");
}
- Att detta Àr sant Àven för Array:er. Eventuellt fÄr du undersöka om det inte Àr en Array.
- Det Àr inte sant för funktoiner dÀr typeof ger vÀrde "function".
Referenser
- Kan lÀtt bli fel med dessa.
Exempel med referenser
Exempel pÄ hur referenser kan missförstÄs
let a = 5;
let b = a;
b=0;
console.log(a); //5
let o={};
o.a = 5;
b=o;
b.a=0;
console.log(o.a); //0
đż Att kopiera Object
Det kan vara svÄrt att kopiera ett objekt eftersom det kan vara svÄrt att samtidigt kopiera eventuella referenser.
- En djup kopia ("deep copy") innebÀr att alla data kopiera till ett nytt objekt och det sker rekursiv för alla objekt som finns.
Resultatet blir att inga referenser blir kvar mellan det ursprunglia
objektet och kopian.
- En yttlig kopia("shallow copy") innebÀr att alla vÀrden i objektet kopieras. Det innebÀr att referesner till bli kopierade men inte
sjÀlva objekten som kommer vara samma i bÄde orginalet och kopian.
Method för att göra en djup kopia av ett Object
Det finns ingen inbyggd funktion för dettam utan man fÄr anvÀnda sig av olika metoder.
let my_copy = JSON.parse(JSON.stringify(my_object));
- Denna metod som presenteras hÀr Àr kanske inte intuitiv
- men det Àr den mest effektiva pÄ de flesta system.
- Vi omvandlar helt enkelt objetet till ett text och parsar den sedan för att fÄ tillbaka objektet.
assign
Om vi istÀllet vill ha en yttlig kopia kan vi anvÀnda kommandot assign.
let my_copy = assign({},)
- Assign anvÀnds egentligen för att kombinera tvÄ objekt.
- För att göra en kopia kan du göra detta:
keys
Om du vill ha alla namn pÄ egenskaper i ett object
Exempel med for-of
Ett exempel.
Det finns mycket mer om Object