Instruktioner

  • p - Presentation
  • f - HelskĂ€rms presentation

Object i JavaScript

# đŸ‘ïžâ€đŸ—šïž 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

Den senare syntaxen Àr den som föredras i mÄnga samnahang. Parantesrna ska bara anvÀndas om det inte gÄr med punkt.

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".

Ofta vill du bara testa om ett vÀrde har en egenskap heller inte. DÄ rÀcker det att testa och blir resultatet "undefined" finns den inte.

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
  

Egentligen inte sÄ förvirande om du tÀnker pÄ objekt och referenser.

👿 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

  • A

Exempel med for-of

Ett exempel.

Det finns mycket mer om Object