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

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