Utmaningar
Nedan finns ett antal program, försök läsa koden och se vad som kommer att skrivas ut.
Du kan få tips om du klickar upp stycket med "Alternativ", då får du ett antal alternativ att välja på, så blir det lite lättare.
Om du inte lyckas så kan du alltid prova koden och köra den på egen hand för att se vad som händer, eller ta upp frågan på en handledning.
Fråga 05-01: Vad skrivs ut?
Försök läsa koden, följ vad som sker och försök se vad som skrivs ut. Klicka på "Alternativ" nedan så får du ett par alternativ och ett av dem är rätt.
Alternativ
- [object Object];
- Ellen Nu
- Nu
- undefined
Kommentar
Typiskt slarvfel. result.lastName är det nog som avses på sista raden.
Fråga 05-02: Vad skrivs ut?
Alternativ
- 3
- 2:34
- 2:22
- undefined
Kommentar
En slamkrypare. movies[1].length är det kluriga. movies[1] refererar till
det andra objektet i arrayen, och egenskapen length på detta objekt ger 2:22.
Fundera på vad som händer om du skriver movies[1].length.length? Eller movies.length?
Fråga 05-03: Vad skrivs ut?
Alternativ
- I have 12 somethings!
- I have 10 somethings!
- I have 0 somethings!
- undefined
Kommentar
objPrototype är här vår prototyp utifrån vilken våra objekt skapas.
obj.prop kommer att skapa en egenskap prop som överskuggar prototypens
egenskap med samma namn. Vad händer om vi kommenterar ut raden obj.prop = quantity?
Fråga 05-04: Är funktionen "run" en funktion utan sidoeffekter? (Pure function)
Alternativ
- Ja
- Nej
- Det beror på
- Kanske
Kommentar
Nej, funktionen har sidoeffekter då den påverkar det objekt vars referens skickas som ett argument till funktionen.
Fråga 05-05: Vad skrivs ut?
Alternativ
- 12
- undefined
- 10
- 22
Kommentar
Här ser vi effekten av att funktionen run har sidoeffekter. Objektet myObj
refererar till, via obj, påverkas.
Fråga 05-06: Vad skrivs ut?
Alternativ
- 12
- undefined
- 10
- 22
Kommentar
Då quantity i detta fall är en värdetyp, så kopieras dess innehåll till
parametern q när quantity skickas som argument. Kopian q ändras och
förstörs när funktionen run returnerar. run är i detta fall en funktion
utan sidoeffekter.
Fråga 05-07: Vad returnerar funktionen?
Alternativ
- ["Ellen", "Sture", "Maja"];
- [{name: "Ellen", points: 13}, {name: "Sture", points: 3}, {name: "Maja", points: 39}]
- { name: 'Sture', points: 3 }
- [ { name: 'Sture', points: 3 } ]
Kommentar
Iteratorfunktioner så som filter, map, reduce, etc. är mycket
kraftfulla. Dessutom lämpar de sig väl att kombinera med "arrow"-funktioner:
Fråga 05-08: Hur många gånger kommer funktionen printTeachers() att anropas?
Alternativ
- 1
- 3
- 4
- Tills applikationen kraschar (evighetsloop)
Fråga 05-09 Vad skrivs ut?
Alternativ
- abyssinian, bombay, bengal, burmese, main coon
- 12, 2, 14, 2, 4
- 34
- Applikationen kraschar (evighetsloop)
Kommentar
Här används Object.keys för att få ut objektets samtliga nycklar. Nyckeln
används sedan för att få ut värdet i objektet. Notationen här liknar den när
vi läser från arrayer. Kan du komma på ett enklare(?) sätt att göra samma sak?
Ett annat sätt som är vanligt att lösa ovanstående på är att använda sig av "destructing":