{
    "path": "/home/krm/dev/mimer-academia/programing/js/datatypes/Sections/object.sv.json",
    "s": "Ignor",
    "invert": true,
    "level": 1,
    "title": [
        "Object i JavaScript"
    ],
    "author": [
        "krm"
    ],
    "created": {
        "year": 2018,
        "month": 9,
        "day": 27
    },
    "status": "alpha",
    "description": [],
    "statments": [],
    "comment": [],
    "cards": [
        {
            "level": 1,
            "title": [
                "# 👁️‍🗨️ Om object i js"
            ],
            "description": [],
            "statments": [
                {
                    "description": [
                        "Objekt och funktioner är grunden för JS"
                    ]
                },
                {
                    "description": [
                        "Allt annat är egentligen trasel."
                    ]
                },
                {
                    "description": [
                        "Bort sätt ifrån de grundläggande typerna, så är det mesta objekt."
                    ]
                }
            ],
            "comment": []
        },
        {
            "level": 1,
            "title": [
                "❓ Vad är ett object?"
            ],
            "description": [
                "Object är ett samling av egenskaper."
            ],
            "statments": [
                {
                    "description": [
                        "En egenskap består i sin tur av namn och värden."
                    ]
                },
                {
                    "description": [
                        "Namnet används för att hitta ett värde."
                    ]
                },
                {
                    "description": [
                        "Ett värde kan vara av vilken typ som helst."
                    ]
                },
                {
                    "description": [
                        "Om värdet är en funktion kallas egenskapen för en metod."
                    ]
                },
                {
                    "description": [
                        "Ett namn är en String eller en Symbol. Används andra typer som namn kommer de konverteras till String."
                    ]
                }
            ],
            "comment": []
        },
        {
            "level": 1,
            "title": [
                "📣 Några kommentar om Object"
            ],
            "description": [
                "Objekt finns äver allt i JS."
            ],
            "statments": [
                {
                    "description": [
                        "Funktioner i js är objekt."
                    ]
                },
                {
                    "description": [
                        "Array i js är object."
                    ]
                },
                {
                    "description": [
                        "Värden av övriga typer beter sig ibland som objekt."
                    ]
                },
                {
                    "description": [
                        "Men det är kompliserat."
                    ]
                }
            ],
            "comment": []
        },
        {
            "level": 1,
            "type": "application",
            "title": [
                "Vad kan vi använder Object till?"
            ],
            "description": [
                "Till nästan allt!"
            ],
            "statments": [
                {
                    "description": [
                        "För att representera något i vår kod"
                    ]
                },
                {
                    "description": [
                        "För att hålla ordning på metoder i ett bibliotek."
                    ]
                },
                {
                    "description": [
                        "För att kapsla in värden saå att koden inte blir krånglig."
                    ]
                }
            ],
            "comment": []
        },
        {
            "level": 1,
            "title": [
                "🀄️ Finns Object i andra språk?"
            ],
            "description": [
                "Objekt i JS har funktoner som återfinns i många olika koncept i andra språk."
            ],
            "statments": [
                {
                    "description": [
                        "I C++, java eller C# används klasser för att skapa objekt."
                    ]
                },
                {
                    "description": [
                        "Det finns också en datatype Map i många språk som har en liknade funktion."
                    ]
                },
                {
                    "description": [
                        "I python kallas denna för ",
                        [
                            {
                                "form": "important"
                            },
                            "Dictionaries"
                        ],
                        "."
                    ]
                }
            ],
            "comment": []
        },
        {
            "level": 1,
            "title": [
                "Att sätta in ett värde i ett Object"
            ],
            "description": [
                "Ett värde kan tilldelas genom att använda \"=\" och en hård parantes."
            ],
            "statments": [
                {
                    "description": [
                        "Exempel: ",
                        [
                            {
                                "form": "important"
                            },
                            "let o={}"
                        ],
                        " - ",
                        "o",
                        [
                            {
                                "form": "important"
                            },
                            "\"tre\"",
                            {
                                "form": "important"
                            },
                            " - "
                        ],
                        "=3",
                        [
                            {
                                "form": "important"
                            },
                            "\"tre\"",
                            {
                                "form": "important"
                            },
                            " - "
                        ],
                        "o",
                        [
                            "\"points\"",
                            {
                                "form": "important"
                            }
                        ],
                        "=35"
                    ]
                },
                {
                    "description": [
                        "Exempel: ",
                        "o",
                        [
                            {
                                "form": "important"
                            },
                            "1",
                            {
                                "form": "important"
                            },
                            " - "
                        ],
                        "=\"ett\"",
                        [
                            {
                                "form": "important"
                            },
                            "1",
                            {
                                "form": "important"
                            },
                            " - "
                        ],
                        "let a=\"result\"; o",
                        [
                            "a",
                            {
                                "form": "important"
                            }
                        ],
                        "=35"
                    ]
                },
                {
                    "description": [
                        "Fry gåt också istället för paranteser bara använda en punkt \".\" och namnet på egenskapen."
                    ]
                },
                {
                    "description": [
                        "Exempel: ",
                        [
                            {
                                "form": "important"
                            },
                            "o.tre = 3"
                        ],
                        " - ",
                        [
                            {
                                "form": "important"
                            },
                            "o.points = 35"
                        ]
                    ]
                }
            ],
            "comment": [
                "Den senare syntaxen är den som föredras i många samnahang. Parantesrna ska bara användas om det inte går med punkt."
            ]
        },
        {
            "level": 1,
            "title": [
                "Att få ett värde ifrån ett Object"
            ],
            "description": [
                "Ett värde kan fås genom att helt enkel skriva namnet på egenskapen du behöver innan för hårda paranteser."
            ],
            "statments": [
                {
                    "description": [
                        "Exempel: ",
                        "o",
                        [
                            {
                                "form": "important"
                            },
                            "\"tre\"",
                            {
                                "form": "important"
                            }
                        ]
                    ]
                },
                {
                    "description": [
                        "Exempel: ",
                        "o.points + o",
                        [
                            {
                                "form": "important"
                            },
                            "3",
                            {
                                "form": "important"
                            }
                        ]
                    ]
                },
                {
                    "description": [
                        "Exempel: ",
                        [
                            {
                                "form": "important"
                            },
                            "o.tre"
                        ]
                    ]
                }
            ],
            "comment": []
        },
        {
            "level": 1,
            "title": [
                "🔄 Att konvertera till och från ett Object"
            ],
            "description": [
                "Det ger oftas inga bra resultat att konvertera till eller ifrån Object."
            ],
            "statments": [
                {
                    "description": [
                        "Boolean({}) //true"
                    ]
                },
                {
                    "description": [
                        "Number({}) //NaN"
                    ]
                },
                {
                    "description": [
                        "String({}) //\"",
                        [
                            "object Object"
                        ],
                        "\""
                    ]
                }
            ],
            "comment": []
        },
        {
            "level": 1,
            "title": [
                "🔬 Är detta ett Object?"
            ],
            "description": [
                "Det går att använa typeof eftersom den returnerar \"object\", men tänk på:"
            ],
            "lang": "js",
            "code": "if(o !== undefined && o.p !== undefined) {\nconsole.log(\"Objectet o har en egenskap p!\");\n}",
            "statments": [
                {
                    "description": [
                        "Att detta är sant även för Array:er. Eventuellt får du undersöka om det inte är en Array."
                    ]
                },
                {
                    "description": [
                        "Det är inte sant för funktoiner där ",
                        [
                            {
                                "form": "important"
                            },
                            "typeof"
                        ],
                        " ger värde \"function\"."
                    ]
                }
            ],
            "comment": [
                "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."
            ]
        },
        {
            "level": 1,
            "title": [
                "Referenser"
            ],
            "description": [],
            "statments": [
                {
                    "description": [
                        "Kan lätt bli fel med dessa."
                    ]
                }
            ],
            "comment": []
        },
        {
            "level": 1,
            "title": [
                "Exempel med referenser"
            ],
            "description": [
                "Exempel på hur referenser kan missförstås"
            ],
            "lang": "js",
            "code": "let a = 5;\nlet b = a;\nb=0;\nconsole.log(a);   //5\nlet o={};\no.a = 5;\nb=o;\nb.a=0;\nconsole.log(o.a);  //0",
            "statments": [],
            "comment": [
                "Egentligen inte så förvirande om du tänker på objekt och referenser."
            ]
        },
        {
            "level": 1,
            "title": [
                "👿 Att kopiera Object"
            ],
            "description": [
                "Det kan vara svårt att kopiera ett objekt eftersom det kan vara svårt att samtidigt kopiera eventuella referenser."
            ],
            "statments": [
                {
                    "description": [
                        "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. \nResultatet blir att inga referenser blir kvar mellan det ursprunglia \nobjektet och kopian."
                    ]
                },
                {
                    "description": [
                        "En yttlig kopia(\"shallow copy\") innebär att alla värden i objektet kopieras. Det innebär att referesner till bli kopierade men inte \nsjälva objekten som kommer vara samma i både orginalet och kopian."
                    ]
                }
            ],
            "comment": []
        },
        {
            "level": 1,
            "title": [
                "Method för att göra en djup kopia av ett Object"
            ],
            "description": [
                "Det finns ingen inbyggd funktion för dettam utan man får använda sig av olika metoder."
            ],
            "lang": "js",
            "code": "let my_copy = JSON.parse(JSON.stringify(my_object));",
            "statments": [
                {
                    "description": [
                        "Denna metod som presenteras här är kanske inte intuitiv"
                    ]
                },
                {
                    "description": [
                        "men det är den mest effektiva på de flesta system."
                    ]
                },
                {
                    "description": [
                        "Vi omvandlar helt enkelt objetet till ett text och parsar den sedan för att få tillbaka objektet."
                    ]
                }
            ],
            "comment": []
        },
        {
            "level": 1,
            "title": [
                "assign"
            ],
            "description": [
                "Om vi istället vill ha en yttlig kopia kan vi använda kommandot ",
                [
                    {
                        "form": "important"
                    },
                    "assign"
                ],
                "."
            ],
            "lang": "js",
            "code": "let my_copy = assign({},)",
            "statments": [
                {
                    "description": [
                        "Assign används egentligen för att kombinera två objekt."
                    ]
                },
                {
                    "description": [
                        "För att göra en kopia kan du göra detta:"
                    ]
                }
            ],
            "comment": []
        },
        {
            "level": 1,
            "title": [
                "keys"
            ],
            "description": [
                "Om du vill ha alla namn på egenskaper i ett object"
            ],
            "statments": [
                {
                    "description": [
                        "A"
                    ]
                }
            ],
            "comment": []
        },
        {
            "level": 1,
            "title": [
                "Exempel med for-of"
            ],
            "description": [
                "Ett exempel."
            ],
            "statments": [],
            "comment": []
        },
        {
            "level": 1,
            "title": [
                "Det finns mycket mer om Object"
            ],
            "description": [],
            "statments": [],
            "comment": []
        }
    ],
    "kind": "sections"
}