sandra-larsson
Educator Fullstack Developer Javascript at Chas Academy
FJS26 · V45 · FÖRDJUPNING
Vad som händer under ytan när ni skriver b = a, [...a] och const.
Chas Academy · Frontendutveckling
UPPVÄRMNING
const a = [1, 2, 3]; const b = a; b.push(4); console.log(a);
Skriv ner den innan vi kör. [1, 2, 3] eller [1, 2, 3, 4]? Och varför?
Del 1 i code-alongen, steg 1–2.
VÄRDEN OCH REFERENSER
VÄRDEN OCH REFERENSER
Del 1, steg 3 och 7–8.
MUTABLE OCH IMMUTABLE
Går att ändra på plats. Arrayer och objekt. Alla som har en pil dit ser ändringen.
const a = [1, 2, 3]; a.push(4); // a är ändrad a[0] = 99; // a är ändrad
Går inte att ändra. Primitiver är alltid immutable. Metoderna returnerar något nytt.
const s = "hej"; s.toUpperCase(); // "HEJ" console.log(s); // "hej"
MUTABLE OCH IMMUTABLE
arr.push(x) arr.splice(i, 1) arr.sort() arr.reverse() arr[i] = x obj.x = 1 delete obj.x
[...arr, x]
arr.toSpliced(i, 1) // eller filter
arr.toSorted()
arr.toReversed()
arr.with(i, x)
{ ...obj, x: 1 }
const { x, ...rest } = objMUTABLE OCH IMMUTABLE
Del 1, steg 4–6.
SPREAD OCH REST
SPREAD OCH REST
const copy = [...numbers]; const withFirst = [0, ...numbers]; const withLast = [...numbers, 4]; const merged = [...a, ...b];
const older = { ...ada, age: 37 };
// age skrivs över av ada:
const oops = { age: 37, ...ada };
const settings = { ...defaults, ...choices };SPREAD OCH REST
SPREAD OCH REST
function sum(...values) {
return values.reduce(
(t, v) => t + v, 0);
}
sum(1, 2, 3, 4); // 10const [first, ...others] = ["Ada", "Grace", "Linus"]; // others: // ["Grace", "Linus"]
const { password,
...publicAccount } = account;
// account är orördDel 1, steg 9–10.
FÄLLAN
FÄLLAN
FÄLLAN
När du vet exakt vad som ska ändras. Vanligast i praktiken.
const moved = {
...user,
address: { ...user.address, city: "Malmö" },
};När du behöver en helt fristående kopia.
const deep = structuredClone(user); deep.address.city = "Malmö";
Del 2 och del 3 i code-alongen.
Övning · Del 2
Nio funktioner i 2-ovningar/js/ovningar.js. Alla ger rätt svar, men ändrar det de får. Skriv om dem så att originalet lämnas orört. Sidan rättar när ni laddar om.
[20 min]
Alla nio visar ✅. Övning 5 och 6 är svårare: där räcker det inte att kopiera det yttersta.
DEL 3 · SPELLISTAN
Code-along · Del 3
Lägg till en låt och klicka Ångra. Läs felet. Laga det, och titta på historiken. Skriv sedan om addSong, removeSong, sortSongs och toggleLike så att varje ändring skapar en ny lista.
[30 min]
Ångra går ett steg bakåt, även efter att man gillat en låt.
Del 4. Samma lådor, men nu handlar det om vem som ser dem.
SCOPE · BRYGGAN
SCOPE
SCOPE
Högst upp i filen, utanför allt. Syns överallt.
const appName = "Spellistan";
Skapat i en funktion, finns bara där.
function makeGreeting() {
const greeting = "Hej!";
}
// greeting finns inte härlet och const lever mellan { och }.
if (age >= 18) {
const message = "Ok";
}
// message finns inte härSCOPE
var bryr sig bara om funktioner, inte block. Ni ser det i äldre kod. Använd let och const.
if (true) {
var leaky = "ut";
}
console.log(leaky); // "ut"Samma namn i ett inre scope skuggar det yttre. Det yttre ändras inte.
const color = "blå";
function paint() {
const color = "röd";
}
// color är fortfarande "blå"Övning · Del 4
Sex korta funktioner i 4-scope/js/vad-loggas.js. Skriv ner er gissning för varje. Avkommentera sedan ett anrop i taget och kör.
[15 min]
Kunna förklara varför, med lådor och pilar. Tre handlar om scope, tre om referenser.
SAMMANFATTNING
b = a kopierar pilen. Spread gör en ny array eller ett nytt objekt, men bara en nivå djupt.const låser pilen, inte det den pekar på.let och const stannar i sitt block.By sandra-larsson